Skip to content

Data

as of

Every source we read, and every table we hold as a CSV or JSON download. Each row has its source URL and the time we fetched it.

Coverage

Each source with its newest snapshot, last check, snapshot count, rows, the audit’s caveat, and the terms and robots.txt we read it under.

Every source we track, when we last fetched and checked it, the copies and rows we’ve stored, and its caveats
Source Last fetched Last check Copies stored Rows Caveat and terms
OpenAI models.mdOpenAI · pricing-catalog unchanged419542
OpenAI pricing.mdOpenAI · pricing-catalog unchanged4096140
Anthropic models overview.mdAnthropic · pricing-catalog unchanged42007
Anthropic pricing.mdAnthropic · pricing-catalog unchanged420040
xAI models.mdxAI · pricing-catalog ok419517
Google Gemini API pricingGoogle · pricing-catalog unchanged4183112
Google Gemini API models.mdGoogle · pricing-catalog unchanged5112
Meta models.mdMeta · pricing-catalog unchanged22948
Meta Muse Wonder.md (availability)Meta · pricing-catalog · join table that adds to another source (no rows of its own)unchanged310
Meta Muse Spark.md (availability)Meta · pricing-catalog · join table that adds to another source (no rows of its own)unchanged310
Meta pricing and rate limits.mdMeta · pricing-catalog unchanged22946
Mistral models.mdMistral · pricing-catalog unchanged51416
Mistral API pricing.mdMistral · pricing-catalog unchanged5149
DeepSeek models and pricing.mdDeepSeek · pricing-catalog unchanged2434
Alibaba Cloud Model Studio pricing (Singapore, international)Alibaba · pricing-catalog ok24348
Alibaba Cloud Model Studio recommended modelsAlibaba · pricing-catalog ok2433
Moonshot AI (Kimi) model list.mdMoonshot AI · pricing-catalog unchanged2434
OpenRouter /api/v1/modelsmarket-wide · pricing-cross-check · cross-check only, never a source of recordok2830
OpenRouter usage rankings (daily)market-wide · demand-share ok2364539
OpenAI Ashby job boardOpenAI · hiring ok283821
Anthropic Greenhouse jobsAnthropic · hiring ok282676
Anthropic Greenhouse departmentsAnthropic · hiring · join table that adds to another source (no rows of its own)ok2820
xAI Greenhouse jobsxAI · hiring ok283300
xAI Greenhouse departmentsxAI · hiring · join table that adds to another source (no rows of its own)ok2780
Mistral Ashby job boardMistral · hiring ok20235
Google careers feed (DeepMind roles only)Google · hiring ok10149
EDGAR full-text search for S-1s (“Anthropic”)market-wide · sec ok329160
EDGAR full-text search for S-1s (“OpenAI”)market-wide · sec ok220695
EDGAR submissions (SPCX, xAI’s parent)market-wide · sec unchanged329786
EDGAR submissions (MSFT)market-wide · sec unchanged220986
EDGAR submissions (AMZN)market-wide · sec unchanged220988
EDGAR submissions (NVDA)market-wide · sec unchanged220987
EDGAR submissions (GOOGL)market-wide · sec unchanged220957
EDGAR submissions (META)market-wide · sec unchanged122035
EDGAR submissions (ORCL)market-wide · sec unchanged116140
EDGAR submissions (BABA, Qwen’s parent)market-wide · sec unchanged10714
EDGAR XBRL company facts (SPCX, xAI’s parent)market-wide · revenue unchanged22098
OpenAI status page incidentsOpenAI · status ok236104
Anthropic (Claude) status page incidentsAnthropic · status ok23674
Google Cloud status incidents (Gemini / Vertex AI only)Google · status unchanged2361
Mistral status page incidentsMistral · status unchanged1651
DeepSeek status page incident history (RSS)DeepSeek · status unchanged928
DeepSeek status page incident history (Atom, for end times)DeepSeek · status · join table that adds to another source (no rows of its own)unchanged90
xAI status page incident history (RSS)xAI · status unchanged10100
OpenAI misalignment reports and noticesOpenAI · disclosures unchanged16226
EDGAR XBRL company facts (anthropic, resolved filer)Anthropic · revenue · built from the edgar-companyfacts template (a stored key filled into an audited URL)unchanged5570
EDGAR submissions (anthropic, resolved filer)Anthropic · sec · built from the edgar-submissions template (a stored key filled into an audited URL)unchanged5572
EDGAR filing index (anthropic S-1, 0001628280-26-067168)market-wide · sec · built from the filing-index template (a stored key filled into an audited URL)unchanged191
EDGAR filing index (anthropic S-1/A, 0001628280-26-068676)market-wide · sec · built from the filing-index template (a stored key filled into an audited URL)unchanged181
Google model page (gemini-2.5-flash)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok91
Google model page (gemini-2.5-flash-image)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-2.5-flash-lite)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-2.5-flash-native-audio-preview-12-2025)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok61
Google model page (gemini-2.5-flash-preview-tts)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-2.5-pro)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok91
Google model page (gemini-2.5-pro-preview-tts)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3-flash-preview)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3-pro-image)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.1-flash-image)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.1-flash-lite)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.1-flash-lite-image)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.1-flash-live-preview)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok91
Google model page (gemini-3.1-flash-tts-preview)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.1-pro-preview)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.1-pro-preview-customtools)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)Never fetchedno page00
Google model page (gemini-3.5-flash-lite)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.5-live-translate-preview)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.5-transcribe)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.5-transcribe-live)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)Never fetchedno page00
Google model page (gemini-3.6-flash)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.8-flash)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.8-flash-lite-tts)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.8-flash-tts)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-3.8-live)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok91
Google model page (gemini-3.8-live-extended-thinking)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok91
Google model page (gemini-4-argon)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-embedding-001)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)unchanged201
Google model page (gemini-embedding-2)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)unchanged201
Google model page (gemini-nano-banana-2.1)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-omni-1.1-flash)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)Never fetchedno page00
Google model page (gemini-omni-1.2-flash)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)Never fetchedno page00
Google model page (gemini-robotics-er-2-preview)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok201
Google model page (gemini-robotics-er-2-streaming-preview)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL)ok191
OpenAI misalignment report page (accessing-and-changing-internal-systems-during-dashboard-research)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged861
OpenAI misalignment report page (an-agent-used-dns-to-reach-an-external-chatbot)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (bypassing-network-restrictions-during-a-coding-evaluation)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged31
OpenAI misalignment report page (circumventing-internet-restrictions-through-an-external-browser)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged861
OpenAI misalignment report page (command-injecting-a-reference-tool-to-copy-a-source-file)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1391
OpenAI misalignment report page (covert-underperformance-on-safety-research-tasks)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged81
OpenAI misalignment report page (damaging-the-task-environment-to-trigger-a-reset)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1111
OpenAI misalignment report page (encouraging-deception-in-compaction-summaries)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (exposing-a-github-token-in-a-public-repository)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (obtaining-public-statistics-with-disallowed-requests)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1111
OpenAI misalignment report page (preparing-for-a-restart-after-reading-slack)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1391
OpenAI misalignment report page (reaching-an-internal-eda-host-through-a-reference-tool)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1391
OpenAI misalignment report page (retrieving-server-secrets-and-bypassing-authorization-on-a-government-statistics-website)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged861
OpenAI misalignment report page (searching-github-for-leaked-api-keys)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (self-generated-prompt-injections-in-compaction-summaries)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (self-replicating-prompt-injections-exist)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (sending-disallowed-web-requests-and-reaching-a-public-file-service)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1111
OpenAI misalignment report page (suppressing-misalignment-monitoring-alerts-and-disabling-misalignment-monitoring)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged671
OpenAI misalignment report page (trying-to-prompt-inject-the-grader-in-filenames)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged31
OpenAI misalignment report page (unauthorized-artifactory-writes-and-cross-sample-communication)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (unauthorized-communication-via-temporary-file-hosting-services)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (uploading-files-to-the-internet-in-order-to-cite-them)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged1611
OpenAI misalignment report page (using-a-funded-test-cryptocurrency-wallet-without-authorization)OpenAI · sec · built from the openai-misalignment-report template (a stored key filled into an audited URL)unchanged861
OpenAI model page (babbage-002)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1621
OpenAI model page (davinci-002)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1621
OpenAI model page (gpt-3.5-turbo)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1661
OpenAI model page (gpt-3.5-turbo-0125)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)Never fetchedno page00
OpenAI model page (gpt-3.5-turbo-1106)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)Never fetchedno page00
OpenAI model page (gpt-3.5-turbo-instruct)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1621
OpenAI model page (gpt-4-0613)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)Never fetchedno page00
OpenAI model page (gpt-4-turbo-2024-04-09)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)Never fetchedno page00
OpenAI model page (gpt-4.1)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-4.1-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-4.1-nano)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1661
OpenAI model page (gpt-4o)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-4o-2024-05-13)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)Never fetchedno page00
OpenAI model page (gpt-4o-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5-nano)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5.1)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5.2)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5.2-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5.4)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1831
OpenAI model page (gpt-5.4-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5.4-nano)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1831
OpenAI model page (gpt-5.4-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1841
OpenAI model page (gpt-5.5)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1841
OpenAI model page (gpt-5.5-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1841
OpenAI model page (gpt-5.6-luna)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1841
OpenAI model page (gpt-5.6-sol)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1841
OpenAI model page (gpt-5.6-terra)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1841
OpenAI model page (gpt-6-astra)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1841
OpenAI model page (gpt-6-luna)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1821
OpenAI model page (gpt-6-sol)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1821
OpenAI model page (gpt-6.1-sol)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok1551
OpenAI model page (gpt-6.1-terra)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)ok211
OpenAI model page (o1)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1671
OpenAI model page (o1-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1671
OpenAI model page (o3)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1841
OpenAI model page (o3-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1671
OpenAI model page (o3-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1841
OpenAI model page (o4-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL)unchanged1671
S-1 statement of operations (anthropic, 0001628280-26-067168)market-wide · sec · built from the prospectus-revenue template (a stored key filled into an audited URL)ok1817
S-1/A statement of operations (anthropic, 0001628280-26-068676)market-wide · sec · built from the prospectus-revenue template (a stored key filled into an audited URL)ok1819
EDGAR XBRL segment facts (GOOGL filing 0001652044-26-000018)market-wide · sec · built from the xbrl-segment template (a stored key filled into an audited URL)unchanged203
EDGAR XBRL segment facts (GOOGL filing 0001652044-26-000048)market-wide · sec · built from the xbrl-segment template (a stored key filled into an audited URL)unchanged202
EDGAR XBRL segment facts (GOOGL filing 0001652044-26-000071)market-wide · sec · built from the xbrl-segment template (a stored key filled into an audited URL)unchanged204
EDGAR XBRL segment facts (GOOGL filing 0001652044-26-000084)market-wide · sec · built from the xbrl-segment template (a stored key filled into an audited URL)unchanged204

Thesis recipes

Other sources the theses read, such as GPU rental prices and companies outside the labs. We store them apart from the lab tables and keep the raw bytes of every fetch that changed.

Every thesis recipe, when we last fetched and ran it, its observations, and its caveats
Recipe Last fetched Last check Observations Caveat and terms
sec-revenue-netCloudflare · Cloudflare quarterly revenue, from SEC EDGAR company facts (CIK 0001477333)unchanged32
sec-revenue-akamAkamai · Akamai quarterly revenue, from SEC EDGAR company facts (CIK 0001086222)ok39
sec-revenue-fslyFastly · Fastly quarterly revenue, from SEC EDGAR company facts (CIK 0001517413)unchanged33
npm-wranglerCloudflare · Daily npm downloads of wrangler, the Cloudflare Workers CLIfailed568
greenhouse-cloudflareCloudflare · Open roles per department on Cloudflare’s Greenhouse boardok1218
cloudflare-changelog-aiCloudflare · Cloudflare changelog entries for Workers AI and Agentsok95
sec-revenue-crwvCoreWeave · CoreWeave quarterly revenue, from SEC EDGAR company facts (CIK 0001769628)unchanged10
gpu-lambdaLambda · Lambda on-demand instance prices per GPU-hour (lambda.ai/pricing)ok45
gpu-coreweaveCoreWeave · CoreWeave on-demand instance prices, divided by GPUs per instanceunchanged8
gpu-nebiusNebius · Nebius on-demand GPU-hour prices (nebius.com/prices)unchanged10
gpu-crusoeCrusoe · Crusoe on-demand GPU instance prices per GPU-hourok4
gpu-togetherTogether AI · Together AI GPU Clusters on-demand prices per GPU-hourok8
gpu-digitaloceanDigitalOcean · DigitalOcean GPU Droplet on-demand prices per GPU-hourok6
gpu-verdaVerda · Verda (formerly DataCrunch) on-demand GPU instance pricesok18
gpu-azureMicrosoft Azure · Azure H100 VM pay-as-you-go prices per region (Azure Retail Prices API)failed144
gpu-oracleOracle Cloud · Oracle Cloud GPU pay-as-you-go list prices per GPU-hour (Price List API)unchanged2
ramp-ai-indexFrontier labs · Ramp AI Index: monthly share of US businesses on Ramp paying for AI, overall and by vendorunchanged468
npm-openaiOpenAI · Daily npm downloads of openai, the OpenAI SDKok543
npm-anthropic-sdkAnthropic · Daily npm downloads of @anthropic-ai/sdk, the Anthropic SDKfailed542
npm-google-genaiGoogle · Daily npm downloads of @google/genai, the Gemini SDKfailed542
npm-mistralMistral · Daily npm downloads of @mistralai/mistralai, the Mistral SDKfailed542
npm-claude-codeAnthropic · Daily npm downloads of @anthropic-ai/claude-code, Claude Codeok543
npm-codexOpenAI · Daily npm downloads of @openai/codex, the Codex CLIfailed542
npm-gemini-cliGoogle · Daily npm downloads of @google/gemini-cli, the Gemini CLIok543
npm-claude-agent-sdkAnthropic · Daily npm downloads of @anthropic-ai/claude-agent-sdk, the Claude Agent SDKfailed542
npm-openai-agentsOpenAI · Daily npm downloads of @openai/agents, the OpenAI Agents SDKfailed542
pypi-openaiOpenAI · Daily PyPI downloads of openai, the OpenAI SDK, without mirrorsunchanged212
pypi-anthropicAnthropic · Daily PyPI downloads of anthropic, the Anthropic SDK, without mirrorsunchanged212
pypi-google-genaiGoogle · Daily PyPI downloads of google-genai, the Gemini SDK, without mirrorsunchanged212
pypi-mistralaiMistral · Daily PyPI downloads of mistralai, the Mistral SDK, without mirrorsunchanged212
pypi-xai-sdkxAI · Daily PyPI downloads of xai-sdk, the xAI SDK, without mirrorsunchanged212
pypi-claude-agent-sdkAnthropic · Daily PyPI downloads of claude-agent-sdk, the Claude Agent SDK, without mirrorsunchanged212
pypi-openai-agentsOpenAI · Daily PyPI downloads of openai-agents, the OpenAI Agents SDK, without mirrorsunchanged212
github-prs-claude-codeAnthropic · Public GitHub pull requests per day from Claude Code (search: "Generated with Claude Code")ok4
github-prs-codexOpenAI · Public GitHub pull requests per day from Codex (search: head:codex/)ok4
github-prs-julesGoogle · Public GitHub pull requests per day from Jules (search: author:app/google-labs-jules)ok4
epoch-data-centersFrontier labs · Epoch AI data centers: current power, H100e, owner and users per siteok384
epoch-data-center-timelinesFrontier labs · Epoch AI data centers: dated power and H100e estimates per site, planned dates includedok579
sec-msft-openaiOpenAI · Microsoft's XBRL facts on msft:OpenAIGlobalLlcMember, from its newest 10-Q or 10-Kunchanged8
sec-amzn-anthropicAnthropic · Amazon's XBRL facts on amzn:AnthropicMember, from its newest 10-Q or 10-Kunchanged8
limits-openai-gpt-6-astraOpenAI · Published API rate limits: OpenAI gpt-6-astra, per usage tierunchanged9
limits-openai-gpt-5-6-terraOpenAI · Published API rate limits: OpenAI gpt-5.6-terra, per usage tierunchanged9
limits-openai-gpt-5-6-lunaOpenAI · Published API rate limits: OpenAI gpt-5.6-luna, per usage tierunchanged9
limits-anthropicAnthropic · Published API rate limits: Anthropic, per model and usage tier, with batch limits and spend capsunchanged195
limits-xaixAI · Published API rate limits: xAI, per model and tier (T0–T4), with spend thresholdsok544
limits-metaMeta · Published API rate limits: Meta, per model (no tiers)unchanged19
pay-openaiOpenAI · Posted US salary bands on OpenAI's Ashby board: median midpoint overall, research and software engineeringok12
pay-anthropicAnthropic · Posted US salary bands on Anthropic's Greenhouse board: median midpoint overall, research and software engineeringok12
newsroom-openaiOpenAI · OpenAI’s newsroom feed: post titles, links and publication timesok230
newsroom-google-deepmindGoogle · Google DeepMind’s newsroom feed: post titles, links and publication timesunchanged30
newsroom-metaMeta · Meta’s newsroom feed: post titles, links and publication timesok13
newsroom-mistralMistral · Mistral’s newsroom feed: post titles, links and publication timesunchanged15

Excluded sources

  • artificial-analysiscut (link only, nothing stored)
  • lmarenacut (link only, nothing stored)
  • compute-dealsstretch goal only (new posts, no deal terms)
  • anthropic-disclosurescut (shown as "no disclosure index")
  • google-disclosurescut (shown as "no disclosure index")
  • xai-disclosurescut (shown as "no disclosure index")
  • meta-hiringcut (shown as "no public feed")
  • meta-statuscut (shown as "no public feed")
  • meta-disclosurescut (shown as "no disclosure index")
  • mistral-disclosurescut (shown as "no disclosure index")
  • deepseek-hiringcut (shown as "no public feed")
  • deepseek-disclosurescut (shown as "no disclosure index")
  • alibaba-hiringcut (shown as "no public feed")
  • alibaba-statuscut (shown as "no public feed")
  • alibaba-disclosurescut (shown as "no disclosure index")
  • moonshot-pricingcut (price fields stay null; shown as a stated gap)
  • moonshot-hiringcut (shown as "no public feed")
  • moonshot-statuscut (shown as "no public feed")
  • moonshot-disclosurescut (shown as "no disclosure index")
  • gpu-runpodcut (GPU prices not stored)
  • gpu-awscut (GPU prices not stored)
  • gpu-google-cloudcut (GPU prices not stored)
  • gpu-vultrcut (GPU prices not stored)
  • gpu-jarvislabscut (GPU prices not stored)
  • gpu-scalewaycut (GPU prices not stored)
  • gpu-fluidstack-hyperboliccut (GPU prices not stored)
  • gpu-aggregatorscross-check only (nothing stored)
  • vscode-marketplacecut (install counts not stored)
  • open-vsxcross-check only (nothing stored)
  • github-commit-searchcut (we use PR search instead)
  • kalshicut (link only, nothing stored)
  • polymarketcut (link only, nothing stored)
  • google-rate-limitscut (per-minute limits not published)
  • mistral-rate-limitscut (no public limits)
  • xai-pay-bandscut (pay only in free text)
  • mistral-pay-bandscut (no posted pay)
  • alphabet-anthropic-stakecut (Alphabet never names the investee)
  • anthropic-newsroomcut (no feed)
  • xai-newsroomcut (no feed)
Each label links to the URL we fetched. Hover over an age for the full UTC timestamp.

Tables

Tables that grow over time download the last 90 days. Full history has every row, each with its license. Every row has its source URL and fetch time.

Exportable tables with row counts and download links
Table Rows Columns Download
snapshotsOne row per fetch of every source, with its content hash, HTTP status, byte count, and the R2 key of the raw response.67,050id, source_id, content_hash, raw_key, http_status, bytes, source_url, fetched_atCSVJSONFull historySampleColumns
prices_latestThe current price and catalog row per SKU and source, as each vendor page stated it at our last check.509entity_key, source_id, provider, model_slug, tier, context_window, input_per_mtok, cached_input_per_mtok, output_per_mtok, currency, effective_from, effective_until, notes, content_hash, snapshot_id, first_seen_at, source_url, fetched_atCSVJSONSampleColumns
jobs_openEvery role currently listed on the job boards we track. A closed role leaves this table and shows up in changes.2,181entity_key, source_id, provider, job_id, title, department, team, location, employment_type, published_at, updated_at, company_name, content_hash, snapshot_id, first_seen_at, source_url, fetched_atCSVJSONSampleColumns
incidentsEvery status-page incident we’ve stored, with the vendor’s title, impact, and status verbatim, start and resolution, and components. Impact is null where the feed publishes none (Anthropic’s Atom feed doesn’t). We keep an incident after it drops out of its feed.358entity_key, source_id, provider, incident_id, title, impact, status, started_at, resolved_at, components, incident_url, content_hash, snapshot_id, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
disclosuresEvery entry on a lab’s own misalignment-disclosure index (only OpenAI publishes one). Each row has the report or notice, title, summary, model, and context verbatim, and the date the index prints beside it. A count measures what a lab disclosed, not how its models behaved.26entity_key, source_id, provider, kind, entry_id, title, summary, model, observed_during, listed_on, entry_url, content_hash, snapshot_id, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
disclosure_timelinesThe dates printed on each report’s own page. That’s every “Label: value” line verbatim, the discovery date, and the disclosure date where the page prints one.23entity_key, source_id, provider, entry_id, title, lines, discovered_on, disclosed_on, content_hash, snapshot_id, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
filersOne row per lab whose CIK we found in its own registration filing (sources.yaml pending_filers). Each row has the CIK, EDGAR’s name for the filer, and the filing we read it from.1entity_key, source_id, provider, cik, name, resolved_form, resolved_accession, resolved_file_date, content_hash, snapshot_id, first_seen_at, source_url, fetched_atCSVJSONSampleColumns
revenue_factsOne row per XBRL revenue fact from EDGAR company facts, with the filer, tag, period, value in USD, and the filing that reported it. Rows are never edited. A restatement is a new row under its own accession.31entity_key, source_id, provider, cik, entity_name, taxonomy, tag, unit, start, end, val, accession_no, fy, fp, form, filed, frame, whitelist_cik, content_hash, snapshot_id, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
prospectus_statementsEvery line of the statement of operations in a lab’s own registration filing (S-1, S-1/A). One row per filing, period, and line, with the line verbatim, a standard key where we have one, and the value in USD, shares, or USD per share. Null means the filing printed a dash. Interim periods are unaudited.170entity_key, source_id, provider, part, cik, entity_name, accession_no, form, filed, start, end, unaudited, units, line_key, label, val, unit, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
prospectus_commitmentsContractual commitments printed in a lab’s registration filing. That covers the contractual-obligations table in MD&A (management’s discussion and analysis), the purchase-commitment schedule in the commitments note, and the one-figure totals, as of each date stated. One row per schedule line and year bucket, with bucket “Total” for the line’s total. approximate marks a figure the filing calls approximate, and statement quotes its sentence.45entity_key, source_id, provider, part, cik, entity_name, accession_no, form, filed, schedule, as_of, audited, approximate, line, bucket, val, statement, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
prospectus_concentrationCustomers at or above 10% of revenue or of accounts receivable, from a lab’s registration filing. One row per filing, basis, customer, and period or balance date, with customers named as the filing names them. A null pct is the filing’s “*”, which means under 10% (not zero).52entity_key, source_id, provider, part, cik, entity_name, accession_no, form, filed, basis, customer, start, end, unaudited, pct, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
prospectus_sharesShare counts from a lab’s registration filing. Each row of “The Offering” (shares offered, and each class outstanding after the offering, with the underwriters’ option where stated), plus the pre-offering counts it’s based on. Null while the filing leaves a count blank.26entity_key, source_id, provider, part, cik, entity_name, accession_no, form, filed, measure, as_of, label, shares, with_option, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
prospectus_risk_factorsEvery risk-factor heading in a lab’s registration filing, verbatim and in order. Each is compared with the same filer’s previous filing and marked unchanged, added, reworded (previous holds the earlier words), or removed. A removed heading is one the previous filing printed and this one doesn’t, listed after this filing’s own.176entity_key, source_id, provider, part, cik, entity_name, accession_no, form, filed, section, heading, change, previous, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
changesThe change log. Every tracked item added, removed, or modified, with its before and after values. Rows are never edited. OpenRouter ranking rows are left out (see rankings_daily on /data).10,742id, entity_key, entity_type, provider, change_type, before_hash, after_hash, before_json, after_json, detected_at, source_url, fetched_atCSVJSONFull historySampleColumns
archived_pricesPrice history from before we watched the labs: one row per SKU per Internet Archive copy of the lab’s own pricing page that we could read. source_url is the copy, captured_at when the Archive saw the page, fetched_at when we read the copy. Never mixed into the live tables.8,084id, capture_id, entity_key, provider, content_hash, payload, captured_at, original_url, basis, source_url, fetched_atCSVJSONFull historySampleColumns
archived_hiringHiring history from before we read the labs’ job boards: open roles per Internet Archive copy of each lab’s own board that we could read. One board row per copy, and one row per department when the copy lists every role. source_url is the copy, captured_at when the Archive saw the board, fetched_at when we read the copy. Never mixed into the live tables.3,460id, capture_id, provider, scope, label, department_id, department, open_roles, captured_at, original_url, basis, source_url, fetched_atCSVJSONFull historySampleColumns
archive_capturesEvery Internet Archive copy the price- and hiring-history backfill considered: read (with how many rows it gave) or skipped, with the reason. A skipped copy gave no rows; nothing on it was guessed.870id, era, provider, original_url, captured_at, status, detail, content_hash, raw_key, bytes, rows, axis, source_url, fetched_atCSVJSONFull historySampleColumns
alertsEvery alert fired, with the change ids it cites and the rule that produced it.667id, severity, headline, explanation, change_ids, rule, created_at, source_url, fetched_atCSVJSONFull historySampleColumns
claim_readingsOne row per thesis claim and data date: the measured value its kill condition is checked against, with the detail behind it (docs/theses/).1,551thesis_id, claim_id, date, value, detail, computed_at, source_url, fetched_atCSVJSONFull historySampleColumns
claim_verdictsThe judge’s verdict on each candidate event for a judged thesis claim, with its rationale and the facts we computed (a price cut’s size, an outage’s hours). Rows are never edited.53id, thesis_id, claim_id, subject, change_id, provider, verdict, rationale, facts, detected_at, judged_at, source_url, fetched_atCSVJSONFull historySampleColumns
track_record_candidatesPress articles (from GDELT) and lab newsroom posts found within 7 days either side of when we saw a notable or critical alert’s change. A candidate isn’t a match. track_record_verdicts says which ones report the same event. Rows are never edited.718id, alert_id, kind, title, snippet, outlet, url, published_at, search_id, found_at, source_url, fetched_atCSVJSONFull historySampleColumns
track_record_verdictsThe judge’s rating of each track-record candidate: whether it reports the alert’s own event, with a rationale grounded in the headline and the alert’s change rows. Rows are never edited.623id, candidate_id, alert_id, same_event, rationale, judged_at, source_url, fetched_atCSVJSONFull historySampleColumns
recipe_observationsWhat each thesis recipe read from its public source (layers/terminal/server/theses/recipes/). One row per recipe, key, and date, with the value, the fields kept beside it, and the R2 key of the raw bytes.11,161id, recipe_id, company, key, date, value, payload, raw_key, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
filed_factsEvery XBRL fact the exposure series read from Microsoft, Alphabet, Amazon, Meta, and Oracle: capex, finance leases, backlog, and what Microsoft and Amazon tag on OpenAI and Anthropic. One row per fact per filing, so a restated value keeps the row it replaced. Rows are never edited.1,245id, ticker, cik, concept, dims, start, end, value, unit, form, filed, accession_no, basis, raw_key, first_seen_at, source_url, fetched_atCSVJSONFull historySampleColumns
exposure_quartersThe series on /exposure, one row per series and period: quarterly capex, backlog at each period end, and the OpenAI and Anthropic lines, from 2020. Each value is the newest filing’s. A derived quarter is a year-to-date figure less the one a quarter shorter, which the less_ columns name.367series_id, ticker, filer, group, label, concept, dims, kind, unit, start, end, value, derived, less_start, less_end, less_value, less_accession_no, accession_no, form, filed, filing_url, source_url, fetched_atCSVJSONFull historySampleColumns
source_runsOne row per check of each source, with what we tried and what happened. There’s no fetched_at column, since a failed run fetched nothing.66,557id, scope, source_id, started_at, status, detail, snapshot_id, added, removed, modified, source_urlCSVJSONFull historySampleColumns
entity_securitiesEach lab and SEC filer we track, mapped to the securities that carry it. Each row has the issuer, CIK, symbol, and exchange as EDGAR lists them, how the lab or filer relates to the security (itself, its parent, a disclosed investor), and the row’s source. A private lab with no security has a row saying so.18entity, entity_name, entity_kind, relationship, issuer, cik, symbol, exchange, listing_status, note, mic, figi, disclosed_in, source_url, checked_onCSVJSONSampleColumns
entity_identifiersOne row per company we name: each lab, each SEC filer we read, and each comparison company. Each row has the legal name, country, CIK, LEI, and for a listed company its ticker, MIC, and FIGI. Every identifier has the URL and time we read it. entity_id is the value of every provider and company column, so this is the table to join on.25entity_id, entity_name, entity_kind, legal_name, country, listing_status, cik, cik_source_url, cik_fetched_at, lei, lei_status, lei_note, lei_source_url, lei_fetched_at, ticker, exchange, mic, figi, share_class_figi, figi_source_url, figi_fetched_at, note, source_url, fetched_atCSVJSONSampleColumns
Data as of the last check, . Exports are live. The counts above can be up to five minutes old, and count every row, not just the last 90 days. Each sample is the first 50 rows of the default download in export order (oldest first when the table is ordered by time), at /export/sample/<table>.csv or .json. entity_identifiers has each company’s CIK, LEI, ticker, and FIGI, and entity_securities maps each lab to the securities that carry it. We no longer export rankings_daily. OpenRouter licenses its rankings CC BY 4.0 but says they aren’t to be re-served as a competing free API. So the per-lab shares stay on /rankings and the raw rows stay with OpenRouter.

Joining to your security master

One identifier table, and a join column on every table that names a company.

Every provider and company column holds an entity_id from entity_identifiers. That table has each company’s CIK, LEI, ticker, MIC, and FIGI, each with the URL and time we read it. A lab without listed shares of its own (OpenAI, Google, xAI) reaches a security through entity_securities, which names the parent or disclosed investor and the filing that says so. Tables with a cik or ticker column join on that too. A provider of other is a company we don’t identify.

Download /export/entity_identifiers.csv and /export/entity_securities.csv, or read both at /api/identifiers. Each table’s Join on line in the dictionary below names its columns.

Data dictionary

Each table’s grain, update cadence, time columns, history, join columns, and commercial use. Every exported column’s type, unit, whether it can be null, whether it is a key, and what it holds.

Every row ends with source_url, the URL it was read from, and fetched_at, when that fetch ran. source_runs has started_at instead, since a failed run fetched nothing. entity_securities has checked_on, since its rows are hand-checked. entity_identifiers also gives each identifier its own source URL and fetch time. In a CSV an empty cell is null.

Rows dated in the last 90 days are CC BY 4.0. A table that grows over time downloads only those rows by default. Add ?history=full for every row. That download adds a license column before source_url: CC-BY-NC-4.0 for a row dated before the window that we first published on or after 2026-11-04, CC-BY-4.0 for the rest. Tables of current rows and lookups download whole. Rebuilt at an as_of before the window, they get the same column. Upstream data keeps its own license.

Event time is when the thing happened, as the source dates it. Knowledge time is when the row first existed for us (or, for a filing, when it was filed). ?as_of= cuts on knowledge time.

text
A string.
integer
A whole number.
number
A decimal number, as the source states it. We never round it.
ISO-8601 timestamp
An ISO-8601 timestamp with its zone (Z or ±hh:mm). Stamps we write are UTC. Stamps read from a vendor keep the vendor’s offset.
date
A calendar date, YYYY-MM-DD.
JSON
Structured data. Nested in the JSON export and JSON text in a CSV cell, except where the meaning says the column is JSON text in both.
boolean
true or false, as the words true and false in a CSV cell.

Use in a spreadsheet

Every CSV link above works as a live source. The examples use the latest prices.

Google Sheets. Paste this into a cell. Sheets refreshes it about once an hour.

=IMPORTDATA("https://frontierterm.com/export/prices_latest.csv")

Excel. Go to Data, then From Web, and paste the CSV link. Excel loads it through Power Query. Refresh it from Data, then Refresh All, or set a refresh interval under Query Properties.

https://frontierterm.com/export/prices_latest.csv

Swap in any table name from the list above. Tables that grow over time give the last 90 days. Add ?history=full for every row, under the full-history license.

How far price history goes back

Before we started checking, we read the Internet Archive’s copies of each lab’s own pricing page.

How far back each lab’s price history reaches
Lab History from Internet Archive copies read · skippedWe check it since Gaps before that
OpenAI2023-03-07 – 2026-08-06 · 107 read · 3 skipped
  • 2025-02-01 – 2026-02-01: From February 2025 the Archive’s copies of openai.com/api/pricing hold only the page shell, then a short list of flagship models by marketing name (“GPT-4.1”, “OpenAI o3”). That list isn’t the price list, so we don’t read it. The copies of platform.openai.com/docs/pricing and its model pages are script shells with no prices.
Anthropic2024-03-04 – 2026-06-11 · 82 read · 10 skipped
  • 2023-01-01 – 2024-03-01: Anthropic published Claude 2 prices as a PDF rate card. The Archive’s copies of anthropic.com/product and the docs’ model pages from 2023 show no prices as text.
Google2024-06-15 – 2026-08-23 · 98 read · 18 skipped
  • 2023-01-01 – 2024-06-15: Until January 2024 the Archive’s copies of ai.google.dev/pricing show no prices. Until April 2024 Gemini was priced per 1,000 characters, and we don’t convert units. The Gemini 1.5 prices shown in April and May 2024 weren’t billed yet (“Billing starts May 30, 2024”).
xAI2025-03-20 – 2026-08-23 · 18 read · 23 skipped
  • 2023-01-01 – 2025-03-20: Until March 2025 x.ai/api showed no per-token prices, and the Archive’s copies of docs.x.ai from that time show none either.
  • 2025-04-17 – 2025-07-28: From April 2025 x.ai/api lists only its featured models and hides the rest behind a button the Archive didn’t save. Read as a price list, the hidden models would look dropped. docs.x.ai’s copies show no prices until late July 2025.
  • 2025-12-21 – 2026-03-12: From late December 2025 the Archive’s copies of docs.x.ai hold the price table before its scripts filled it in, and x.ai/api still lists featured models only. The markdown version starts 2026-03-12.
MetaMeta had no API price list of its own before the page we check now.—
Mistral2024-02-26 – 2025-02-03 · 33 read · 5 skipped
  • 2023-01-01 – 2024-02-26: Until late February 2024 docs.mistral.ai priced the API in euros only. We store prices as printed and don’t convert currencies.
  • 2025-02-04 – 2026-08-25: From March 2025 mistral.ai/pricing lists prices by product name (“Mistral Medium 3”) with no API model name, and we don’t guess which model a name means. The Archive’s first copy of the docs price list is from 2026-08-13, as HTML we don’t read.
Rows from an archived copy are marked on each SKU’s page, in /api/prices/<key>, and in the archived_prices table above. Their source link is the copy. We skip a copy we can’t read with confidence. Archived rows are older than the license window, so they’re CC BY-NC 4.0.

How far hiring history goes back

Before we started reading the boards, we read the Internet Archive’s copies of each lab’s own job board.

How far back each lab’s hiring history reaches
Lab History from Internet Archive copies read · skippedWe check it since Gaps before that
OpenAI2023-01-08 – 2026-08-19 · 53 read · 0 skipped
  • 2024-03-14 – 2024-05-22: The Archive holds no copy of the board from this stretch.
  • 2024-05-22 – 2024-09-06: The Archive holds no copy of the board from this stretch.
  • 2024-09-27 – 2024-11-12: The Archive holds no copy of the board from this stretch.
  • 2025-09-29 – 2025-11-19: The Archive holds no copy of the board from this stretch.
  • 2025-11-19 – 2026-03-08: The Archive holds no copy of the board from this stretch.
  • 2026-03-18 – 2026-06-09: The Archive holds no copy of the board from this stretch.
  • 2026-06-09 – 2026-08-19: The Archive holds no copy of the board from this stretch.
Anthropic2023-01-18 – 2026-08-17 · 128 read · 0 skipped
  • 2023-08-06 – 2023-12-07: The Archive holds no copy of the board from this stretch.
Google2023-01-27 – 2026-01-23 · 79 read · 0 skipped
  • 2026-02-01 – 2026-11-04: From early 2026 deepmind.google/careers also sends applicants to Google’s careers site (company=DeepMind), the listing we read live. From then the Greenhouse board holds only part of DeepMind’s roles (9 on 2026-08-30), so we stop reading it.
xAI2023-11-05 – 2026-08-21 · 92 read · 1 skipped
  • 2023-01-01 – 2023-11-05: xAI announced itself in July 2023. The Archive’s first copy of its board is from November 2023.
  • 2023-12-03 – 2024-02-07: The Archive holds no copy of the board from this stretch.
Metano history yetMeta posts its roles on metacareers.com, which draws its listing with scripts and has no public board API. Meta’s AI roles aren’t separable from the rest of the company there either.——
Mistral2023-09-27 – 2026-10-21 · 64 read · 0 skipped
  • 2023-01-01 – 2023-09-27: Mistral was founded in April 2023. The Archive’s first copy of its Lever board is from September 2023.
  • 2025-11-19 – 2026-01-07: The Archive holds no copy of the board from this stretch.
Open roles per copy, on the whole board and per department, are in the archived_hiring table above and in /api/hiring/history (each lab’s archived points). Their source link is the copy. We skip a copy we can’t read with confidence. Archived rows are CC BY-NC 4.0.

Point in time

What we knew at a given moment, for a backtest.

Add ?as_of= with an ISO-8601 timestamp and a timezone, such as /api/prices?as_of=2026-10-01T00:00:00Z. You get what we held at that moment. A row counts from when we fetched it. A judged alert counts from when the model could have written it, not from the event it describes.

  • /api/alerts, /api/prices, /api/prices/<key>, /api/hiring, /api/hiring/history and /api/revenue rebuild their response and add a point_in_time field. It says how the answer was rebuilt and lists any keys the change log can’t confirm.
  • Every table above except prospectus_statements, prospectus_commitments, prospectus_concentration, prospectus_shares, prospectus_risk_factors, claim_readings, recipe_observations, entity_securities, entity_identifiers. Tables that only grow are cut at that moment. Tables of current rows are rebuilt from the change log and gain an as_of_verified column. The data dictionary gives each table’s rule, or why it answers 400.
  • Before our first fetch, /api/prices and /api/prices/<key> answer from the Internet Archive’s copies instead, and point_in_time names the copy each lab’s prices came from. That’s when the Archive saw the page, not when we knew it. Every other route refuses a date that early.
  • The MCP tools for those routes take an as_of argument.

Any other route returns a 400 instead of today’s data under an earlier date.

Commercial use

Using the full history in a product, a fund process, or anything else commercial? That needs a paid license. So do signed terms, a feed you can depend on, and coverage we don’t have yet. Write to us. Upstream CC BY data keeps its own terms, and some sources aren’t in any paid offer.

Email us

For institutions

API keys for licensees: higher rate limits, the full history under a paid license, a daily bulk feed in CSV and Parquet (also over S3), and alert webhooks.

Funds and research teams can license the full history for commercial use. We issue each licensee an API key by hand. There’s no sign-up, and pricing is by email.

Ask for a key

How keys work

  • Send the key in a header: Authorization: Bearer ftk_…. A request without one is served the way it is today.
  • A key raises your rate limits and labels older rows with your license instead of CC BY-NC 4.0. It doesn’t change the data. You get the same rows at the same moment as everyone else.
  • A wrong, expired, or revoked key gets a 401 that says which. We never serve it as a request without a key.
  • A key lasts for its license term, usually 12 months, and doesn’t renew itself.

Rate limits

Requests a minute, per route, for each kind of caller
Caller /api routes and bulk files /export tables Saved pages
No key, per IP address60 a minute30 a minuteNone
Research key600 a minute60 a minuteNone
Systematic key1,200 a minute60 a minute600 a minute

Each route counts on its own. Over the limit, you get a 429 with a Retry-After header.

Bulk feed

/export/bulk/manifest.json lists each table as a gzipped CSV and as a Parquet file, rebuilt once a day. Each entry has the file’s URL, rows, bytes, SHA-256, build time, schema version, and license, with the Parquet file’s under parquet. Compare the SHA-256 with your copy and download only what changed. The manifest and the files also answer If-None-Match with a 304.

Without a key you get the last 90 days of each table that grows, and all of the rest, under CC BY 4.0. With a key you get every row, each labeled in a license column.

A Parquet file has the same rows and columns as the CSV, typed by the data dictionary and compressed with gzip. Timestamps are UTC instants. The file’s metadata states its license too. DuckDB and pandas read one straight from its URL:

-- DuckDB
SELECT * FROM 'https://frontierterm.com/export/bulk/recent/prices_latest.parquet';

# pandas
pd.read_parquet("https://frontierterm.com/export/bulk/recent/prices_latest.parquet")

With a key, send it as the Authorization header (in DuckDB, a secret of TYPE http with that header) and read the full file instead.

S3 access

Licensees can also read the full-history files from an S3-compatible bucket on Cloudflare R2. Ask with your key and we’ll send read-only credentials: an access key ID, a secret, and the endpoint. They open this one bucket and end when your key does.

The bucket is frontier-terminal-bulk-licensed. It holds full/<table>.csv.gz, full/<table>.parquet, and manifest.json, the same files the keyed manifest lists. Set the region to auto.

-- DuckDB
CREATE SECRET (TYPE r2, KEY_ID '<access key id>', SECRET '<secret>', ACCOUNT_ID '<account id>');
SELECT * FROM 'r2://frontier-terminal-bulk-licensed/full/changes.parquet';

# pandas (with s3fs)
pd.read_parquet("s3://frontier-terminal-bulk-licensed/full/changes.parquet", storage_options={
    "key": "<access key id>", "secret": "<secret>",
    "client_kwargs": {"endpoint_url": "https://<account id>.r2.cloudflarestorage.com"}})

Saved pages

With a systematic key, /export/payloads/<snapshot id> returns the page we read, byte for byte, for any snapshot in /export/snapshots. Only for sources that are ours to license. A source we haven’t cleared, or someone else’s dataset, gets a 403.

With a key, you can get alerts pushed to you instead of polling. Email us an https URL and the lowest severity you want: critical, notable, or info for everything. We set it up and send you a signing secret once, the same way we send keys.

  • We send an alert only after it’s on the public site, never before. That’s usually within 40 minutes of the check that found it.
  • Judged alerts (a model’s reading of the changes) wait an hour first, like our posts on X and Bluesky, so we can withdraw a bad one. A withdrawn alert is never sent.
  • The URL must be https on port 443 with a public hostname. We don’t send to IP addresses or private networks, and we don’t follow redirects.
  • Revoking or expiring your key stops its webhooks.

Each delivery is a POST with a JSON body and these headers:

X-Frontier-Signature: sha256=<hex>
X-Frontier-Delivery: whd_…
X-Frontier-Timestamp: <unix seconds>
X-Frontier-Event: alert.created
{
  "schema_version": "1.5.1",
  "event": "alert.created",
  "delivery_id": "whd_0f6c2b9e-1d4a-4c8e-9b7a-3e5f2a1c0d9b",
  "sent_at": "2026-11-04T12:35:00.000Z",
  "alert": {
    "id": "a3f1c2e4b5d697881234567890abcdef1234567890abcdef1234567890abcd",
    "severity": "critical",
    "headline": "Example Lab cut Model X output price 50%",
    "explanation": "output_per_mtok went from 10 to 5 USD on the Example Lab price list.",
    "rule": "agent-judge",
    "created_at": "2026-11-04T12:00:00.000Z",
    "source_url": "https://example.com/pricing",
    "fetched_at": "2026-11-04T12:00:00.000Z",
    "permalink": "https://frontierterm.com/alerts/a3f1c2e4b5d697881234567890abcdef1234567890abcdef1234567890abcd",
    "source_urls": [
      "https://example.com/pricing"
    ],
    "change_count": 1,
    "changes": [
      {
        "id": "5e8d0c1b2a3f4e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8e9d",
        "entity_key": "price:example-lab:model-x:standard",
        "entity_type": "price",
        "provider": "example-lab",
        "change_type": "modified",
        "before_hash": "b1",
        "after_hash": "b2",
        "before_json": "{\"output_per_mtok\":10}",
        "after_json": "{\"output_per_mtok\":5}",
        "detected_at": "2026-11-04T12:00:00.000Z",
        "source_url": "https://example.com/pricing",
        "fetched_at": "2026-11-04T12:00:00.000Z"
      }
    ]
  },
  "license": {
    "recent": {
      "id": "CC-BY-4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "days": 90,
      "from": "2026-08-06"
    },
    "older": {
      "id": "LicenseRef-FrontierTerminal-Commercial",
      "url": "/data#institutions",
      "published_from": "2026-11-04"
    },
    "terms": "/license",
    "note": "Our compilation and derived numbers dated on or after recent.from are CC BY 4.0. Older ones are licensed to the holder of this API key under the Frontier Terminal commercial license, which permits commercial use for its term. Upstream data keeps its own license, and the facts belong to their publishers."
  }
}

alert.changes has the cited rows of the changes table, up to 100. The permalink has all of them.

Check the signature before you trust a delivery. It’s an HMAC-SHA256 of the raw body, keyed with your secret. The timestamp header matches sent_at, which is inside the signed body. Reject anything more than 5 minutes off your clock, so an old delivery can’t be replayed.

Node

import { createHmac, timingSafeEqual } from 'node:crypto'

// rawBody: the request body as bytes, before any JSON parsing.
export function verify(rawBody, headers, secret) {
  const expected = Buffer.from(
    'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex'),
  )
  const given = Buffer.from(headers['x-frontier-signature'] ?? '')
  if (given.length !== expected.length || !timingSafeEqual(given, expected)) return false
  const sentAt = Number(headers['x-frontier-timestamp'])
  return Math.abs(Date.now() / 1000 - sentAt) <= 300
}

Python

import hashlib, hmac, time

# raw_body: the request body as bytes, before any JSON parsing.
def verify(raw_body: bytes, headers, secret: str) -> bool:
    expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(headers.get("X-Frontier-Signature", ""), expected):
        return False
    sent_at = int(headers.get("X-Frontier-Timestamp", "0"))
    return abs(time.time() - sent_at) <= 300

Answer with any 2xx within 10 seconds. Anything else counts as a failure, and we retry after 5 minutes, then 10, 20, and so on, up to 6 hours apart, for 24 hours. A retry has the same X-Frontier-Delivery, so store the ids you’ve handled and skip repeats. You may get one delivery twice. If a delivery still fails after 24 hours, we pause the webhook and get in touch. Missed alerts are always on /alerts and in the API.

What the paid license covers

The Frontier Terminal commercial license covers our compilation and the numbers we derive, over the full history, for commercial use under your signed terms. The facts still belong to their publishers. Upstream CC BY 4.0 data keeps its own attribution condition, and sources we haven’t cleared aren’t in it. See which sources are in each group.

Schema versions

Every export and API response states its schema_version. These are the releases, newest first.

Current: 1.5.1
  • Adding a table or a column is a minor version.
  • Removing or renaming one is a major version. Licensees hear about it 90 days before it ships.
  • Changing what a column holds is a minor version, with a note.

A JSON response has schema_version as a field. A CSV or a JSON array has it in the X-Schema-Version header.

  1. 1.5.1 ·

    The Parquet bulk files are compressed with gzip instead of zstd, which failed on the largest tables. Readers pick the codec up from each file. No columns changed.

  2. 1.5.0 ·

    Hiring history from before we read the labs’ job boards, from the Internet Archive’s copies of each lab’s own board: a new archived_hiring table (open roles per copy, on the whole board and per department), and an axis column on archive_captures saying which table a copy’s rows went to.

    • archived_hiring adds id, capture_id, provider, scope, label, department_id, department, open_roles, captured_at, original_url, basis, source_url, fetched_at.
    • archive_captures adds axis.Every existing row is pricing.
  3. 1.4.0 ·

    Security-master identifiers. entity_identifiers has one row per company we name, with its CIK, LEI, ticker, MIC and FIGI, each with the URL and time we read it. Join any provider or company column to its entity_id. entity_securities gains mic, figi, and disclosed_in, the filing that discloses a parent or an investor. It also gains a row for Alphabet’s stake in Anthropic, from Anthropic’s S-1/A.

    • entity_identifiers adds entity_id, entity_name, entity_kind, legal_name, country, listing_status, cik, cik_source_url, cik_fetched_at, lei, lei_status, lei_note, lei_source_url, lei_fetched_at, ticker, exchange, mic, figi, share_class_figi, figi_source_url, figi_fetched_at, note, source_url, fetched_at.
    • entity_securities adds mic, figi, disclosed_in.A new investor row: anthropic to GOOGL, disclosed in Anthropic’s S-1/A.
  4. 1.3.0 ·

    New: every bulk file also as Parquet (zstd), the same rows and columns typed by the data dictionary, listed under parquet in each manifest entry. Licensees can also read the full-history files over S3 with read-only credentials. No table columns changed.

  5. 1.2.0 ·

    Two tables for the price history from before we watched the labs, read from the Internet Archive’s copies of each lab’s own pricing page: archived_prices (one row per SKU per copy) and archive_captures (every copy considered, read or skipped with the reason).

    • archived_prices adds id, capture_id, entity_key, provider, content_hash, payload, captured_at, original_url, basis, source_url, fetched_at.
    • archive_captures adds id, era, provider, original_url, captured_at, status, detail, content_hash, raw_key, bytes, rows, source_url, fetched_at.
  6. 1.1.0 ·

    New: alert webhooks for licensees. Each POST carries schema_version, the alert with the columns of the alerts table plus permalink, source_urls and its cited rows of the changes table, and the license for your key. No table columns changed.

  7. 1.0.0 ·

    First versioned schema. Every export, bulk file, and API response states its schema_version from here on. A full-history export adds a license column before source_url, and a rebuilt export (?as_of=) adds as_of_verified. Neither changes the default columns.

Reliability

How our own feed has held up: checks by source, stale data, filing alerts against EDGAR, deploys, and corrections. Every figure comes from stored records.

Good checks, 30 days
97.1%
SEC feeds late, 90 days
3 h
EDGAR acceptance to alert, median
31 min
EDGAR release to alert, median
31 min
Deploys that passed
34 of 34
Corrections
6

Checks by source

A good check is one where the source answered: new content, the same content, or a page that isn’t there. Pages we build per model or per filing are grouped by kind. Worst first. Counted from through .

Each source with its share of good checks over 30 and 90 days and its longest wait for a good check, worst first
Source Checked every 30 days Good checks90 days Good checksLongest wait for a good check
OpenAI pricing.mdOpenAI · pricing-catalog30 min61.3% 1,629 of 2,65474.9% 3,070 of 4,09512.2 days to
Mistral status page incidentsMistral · status6 h78.9% 15 of 1978.9% 15 of 1924 h to
OpenAI misalignment reports and noticesOpenAI · disclosures6 h99.1% 115 of 11688.1% 142 of 1613.5 days to
EDGAR full-text search for S-1s (“OpenAI”)market-wide · sec30 min89.9% 1,259 of 1,40093.6% 2,065 of 2,2062.6 days to
S-1 statement of operations (2 sources)market-wide · sec6 h94.4% 34 of 3694.4% 34 of 3612 h to
EDGAR filing index (2 sources)market-wide · sec6 h94.5% 35 of 3794.5% 35 of 3712 h to
EDGAR XBRL segment facts (4 sources)market-wide · sec6 h95% 76 of 8095% 76 of 8012 h to
Google model page (34 sources)Google · pricing-catalog6 h95.7% 546 of 57095.7% 546 of 5703 days to
Anthropic Greenhouse jobsAnthropic · hiring6 h98.2% 114 of 11698.3% 233 of 23718 h to
Anthropic models overview.mdAnthropic · pricing-catalog30 min99.8% 2,650 of 2,65498.4% 4,085 of 4,14930.4 h to
Meta models.mdMeta · pricing-catalog30 min98.9% 2,264 of 2,28998.9% 2,264 of 2,2896.4 h to
EDGAR submissions (BABA, Qwen’s parent)market-wide · sec30 min99% 106 of 10799% 106 of 10760 min to
EDGAR submissions (ORCL)market-wide · sec30 min99.1% 114 of 11599.1% 114 of 11560 min to
Google Gemini API models.mdGoogle · pricing-catalog30 min99.2% 507 of 51199.2% 507 of 51175 min to
Google Gemini API pricingGoogle · pricing-catalog30 min99.6% 2,644 of 2,65499.5% 4,129 of 4,14918 h to
Anthropic (Claude) status page incidentsAnthropic · status6 h99.1% 115 of 11699.5% 234 of 23512 h to
Google Cloud status incidents (Gemini / Vertex AI only)Google · status6 h99.1% 115 of 11699.5% 234 of 23512 h to
OpenAI status page incidentsOpenAI · status6 h99.1% 115 of 11699.5% 234 of 23512 h to
Anthropic Greenhouse departmentsAnthropic · hiring6 h99.1% 115 of 11699.5% 236 of 23718 h to
OpenAI Ashby job boardOpenAI · hiring6 h99.1% 115 of 11699.5% 236 of 23718 h to
xAI Greenhouse jobsxAI · hiring6 h99.1% 115 of 11699.5% 236 of 23718 h to
xAI Greenhouse departmentsxAI · hiring6 h99.1% 115 of 11699.5% 236 of 23718 h to
OpenAI model page (41 sources)OpenAI · pricing-catalog6 h99.5% 4,401 of 4,42099.6% 7,003 of 7,02712 h to
EDGAR XBRL company facts (anthropic, resolved filer)Anthropic · revenue30 min99.8% 555 of 55699.8% 555 of 55660 min to
EDGAR submissions (anthropic, resolved filer)Anthropic · sec30 min99.8% 555 of 55699.8% 555 of 55660 min to
EDGAR full-text search for S-1s (“Anthropic”)market-wide · sec30 min99.6% 1,395 of 1,40099.8% 2,880 of 2,8853 h to
EDGAR submissions (META)market-wide · sec30 min99.8% 1,217 of 1,21999.8% 1,217 of 1,21960 min to
OpenAI models.mdOpenAI · pricing-catalog30 min99.8% 2,650 of 2,65599.8% 4,145 of 4,15018 h to
Anthropic pricing.mdAnthropic · pricing-catalog30 min99.8% 2,650 of 2,65499.9% 4,145 of 4,14918 h to
EDGAR XBRL company facts (SPCX, xAI’s parent)market-wide · revenue30 min99.8% 1,398 of 1,40099.9% 2,206 of 2,20860 min to
EDGAR submissions (AMZN)market-wide · sec30 min99.8% 1,398 of 1,40099.9% 2,206 of 2,20860 min to
EDGAR submissions (GOOGL)market-wide · sec30 min99.8% 1,398 of 1,40099.9% 2,206 of 2,20860 min to
EDGAR submissions (MSFT)market-wide · sec30 min99.8% 1,398 of 1,40099.9% 2,206 of 2,20860 min to
EDGAR submissions (NVDA)market-wide · sec30 min99.8% 1,398 of 1,40099.9% 2,206 of 2,20860 min to
EDGAR submissions (SPCX, xAI’s parent)market-wide · sec30 min99.8% 1,398 of 1,40099.9% 2,883 of 2,8853 h to
xAI models.mdxAI · pricing-catalog30 min99.9% 2,652 of 2,65499.9% 4,147 of 4,14918 h to
OpenRouter /api/v1/modelsmarket-wide · pricing-cross-check6 h100% 116 of 116100% 237 of 23718 h to
Mistral Ashby job boardMistral · hiring6 h100% 19 of 19100% 19 of 1912 h to
OpenAI misalignment report page (23 sources)OpenAI · disclosures6 h100% 2,143 of 2,143100% 2,605 of 2,60512 h to
OpenRouter usage rankings (daily)market-wide · demand-share6 h100% 116 of 116100% 234 of 23412 h to
Google careers feed (DeepMind roles only)Google · hiring6 h100% 9 of 9100% 9 of 96 h to
DeepSeek status page incident history (RSS)DeepSeek · status6 h100% 9 of 9100% 9 of 96 h to
DeepSeek status page incident history (Atom, for end times)DeepSeek · status6 h100% 9 of 9100% 9 of 96 h to
xAI status page incident history (RSS)xAI · status6 h100% 9 of 9100% 9 of 96 h to
Meta pricing and rate limits.mdMeta · pricing-catalog30 min100% 2,289 of 2,289100% 2,289 of 2,28930 min to
Mistral models.mdMistral · pricing-catalog30 min100% 510 of 510100% 510 of 51030 min to
Mistral API pricing.mdMistral · pricing-catalog30 min100% 510 of 510100% 510 of 51030 min to
Alibaba Cloud Model Studio recommended modelsAlibaba · pricing-catalog30 min100% 240 of 240100% 240 of 24025 min to
Alibaba Cloud Model Studio pricing (Singapore, international)Alibaba · pricing-catalog30 min100% 240 of 240100% 240 of 24025 min to
DeepSeek models and pricing.mdDeepSeek · pricing-catalog30 min100% 240 of 240100% 240 of 24025 min to
Meta Muse Spark.md (availability)Meta · pricing-catalog6 h100% 28 of 28100% 28 of 2825 min to
Meta Muse Wonder.md (availability)Meta · pricing-catalog6 h100% 28 of 28100% 28 of 2825 min to
Moonshot AI (Kimi) model list.mdMoonshot AI · pricing-catalog30 min100% 240 of 240100% 240 of 24025 min to

When our data was older than we say

We say how often we check on the About page. These are the stretches, over the last 90 days, when no check ran in which most sources answered. A check can run late by the grace shown before we count it.

SEC filings and model catalogs (every 30 min, grace 15 min). Late 2 times for 3 h in all, over 2,886 checks since .

Every source (every 6 h, grace 30 min). Late 2 times for 18 h in all, over 238 checks since .

SEC filings: EDGAR to our alert

Each filing one of our rules alerted on (S-1s and amendments, 424B4s, 10-Qs and 10-Ks of the companies we track, and a lab’s first registration). No model writes these alerts, so the alert time is when the check that saw the filing ran. We read EDGAR’s acceptance time from the copy of the filer’s submissions feed or filing index we stored. EDGAR doesn’t publish a filing accepted after 5:30 p.m. Eastern until 6:00 a.m. Eastern on its filing date, so we time those from release too.

7 filings since . From release, the median is 31 min and the slowest 31 min. From acceptance, the median is 31 min and the slowest 12.2 h.

Each filing a rule alerted on, with EDGAR’s acceptance time, our alert time, and the minutes between
Filing EDGAR accepted We alerted From acceptance From release
S-1/A filed by Anthropic, PBC (2026-11-02)0001628280-26-068676 · s1-floor6 min6 min
10-Q filed by AMAZON COM INC (2026-10-30)0001018724-26-000040 · periodic-floorpublic 12.2 h31 min
10-Q filed by Alphabet Inc. (2026-10-29)0001652044-26-000084 · periodic-floorpublic 10 h31 min
10-Q filed by MICROSOFT CORP (2026-10-28)0001193125-26-436133 · periodic-floor24 min24 min
Anthropic, PBC filed S-1 (2026-10-26) — CIK 0002130357 resolved for anthropic0001628280-26-067168 · cik-resolved31 min31 min
10-Q filed by SPACE EXPLORATION TECHNOLOGIES CORP (2026-10-22)0001628280-26-066880 · periodic-floor28 min28 min
10-Q filed by Meta Platforms, Inc. (2026-10-22)0001628280-26-066773 · periodic-floorpublic 10.5 h31 min

Alerts our judge writes (8-Ks, say) aren’t timed here. The track record times every notable alert against the first press report.

Deploys

Every push to main runs a smoke test once it’s live. It waits for production to serve that commit, then checks the main pages and routes. A test cut short by a newer push shows as superseded. We read the results from GitHub Actions every hour.

34 passed, 0 failed, and 2 superseded, since , when the smoke test started. This page is served by 70a31589.

Each push to main with its smoke test result, newest first
Commit Pushed Smoke test
70a31589passed
eccab0e5passed
6ed2e40bpassed
773964eapassed
08e577a8passed
145769eepassed
5a5124a7passed
9c079d48passed
85f35264passed
a57cc0fapassed
bd46ddf9passed
ffca0e57passed
0bcfd2fbpassed
99a2fc0bpassed
a46c937apassed
c2ad3165passed
2e2920e6passed
3510100bpassed
4ba338dfpassed
cf1f522fpassed
6761c5d3passed
f15937bdpassed
d3237cdbpassed
8e80029apassed
2f8bbe58passed
1f1bdde1passed
47fa6387passed
345a7c6apassed
f35896bbpassed
652ee767passed
39b59b47passed
5d733b27superseded
3c47aecdpassed
597c8cc0passed
5be30b81passed
087ce5easuperseded

Corrections

6 corrections so far. The latest, on (Demand share): Two different token shares were printed without their denominators: the readout’s share of all OpenRouter tokens and the spend table’s share of the tracked labs’ tokens, side by side on /rankings. Every correction.

Computed from stored records at . The same figures, with every timestamp and source URL, are at /api/reliability and the MCP tool get_reliability.

Terms

The last 90 days are CC BY 4.0. Older rows are CC BY-NC 4.0, except what we published before 2026-11-04, which stays CC BY 4.0. A full-history download labels each row in a license column. The underlying facts belong to their publishers. Full terms and the attribution line.

Feed

Alerts as an Atom feed at /alerts.xml. Add ?include=info for the minor changes.

Data from the last 90 days is CC BY 4.0. Older data is CC BY-NC 4.0, except what we published before 2026-11-04, which stays CC BY 4.0. How you can reuse it.