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.
| Source | Last fetched | Last check | Copies stored | Rows | Caveat and terms |
|---|---|---|---|---|---|
| OpenAI models.mdOpenAI · pricing-catalog | unchanged | 4195 | 42 | ||
| OpenAI pricing.mdOpenAI · pricing-catalog | unchanged | 4096 | 140 | ||
| Anthropic models overview.mdAnthropic · pricing-catalog | unchanged | 4200 | 7 | ||
| Anthropic pricing.mdAnthropic · pricing-catalog | unchanged | 4200 | 40 | ||
| xAI models.mdxAI · pricing-catalog | ok | 4195 | 17 | ||
| Google Gemini API pricingGoogle · pricing-catalog | unchanged | 4183 | 112 | ||
| Google Gemini API models.mdGoogle · pricing-catalog | unchanged | 511 | 2 | ||
| Meta models.mdMeta · pricing-catalog | unchanged | 2294 | 8 | ||
| Meta Muse Wonder.md (availability)Meta · pricing-catalog · join table that adds to another source (no rows of its own) | unchanged | 31 | 0 | ||
| Meta Muse Spark.md (availability)Meta · pricing-catalog · join table that adds to another source (no rows of its own) | unchanged | 31 | 0 | ||
| Meta pricing and rate limits.mdMeta · pricing-catalog | unchanged | 2294 | 6 | ||
| Mistral models.mdMistral · pricing-catalog | unchanged | 514 | 16 | ||
| Mistral API pricing.mdMistral · pricing-catalog | unchanged | 514 | 9 | ||
| DeepSeek models and pricing.mdDeepSeek · pricing-catalog | unchanged | 243 | 4 | ||
| Alibaba Cloud Model Studio pricing (Singapore, international)Alibaba · pricing-catalog | ok | 243 | 48 | ||
| Alibaba Cloud Model Studio recommended modelsAlibaba · pricing-catalog | ok | 243 | 3 | ||
| Moonshot AI (Kimi) model list.mdMoonshot AI · pricing-catalog | unchanged | 243 | 4 | ||
| OpenRouter /api/v1/modelsmarket-wide · pricing-cross-check · cross-check only, never a source of record | ok | 283 | 0 | ||
| OpenRouter usage rankings (daily)market-wide · demand-share | ok | 236 | 4539 | ||
| OpenAI Ashby job boardOpenAI · hiring | ok | 283 | 821 | ||
| Anthropic Greenhouse jobsAnthropic · hiring | ok | 282 | 676 | ||
| Anthropic Greenhouse departmentsAnthropic · hiring · join table that adds to another source (no rows of its own) | ok | 282 | 0 | ||
| xAI Greenhouse jobsxAI · hiring | ok | 283 | 300 | ||
| xAI Greenhouse departmentsxAI · hiring · join table that adds to another source (no rows of its own) | ok | 278 | 0 | ||
| Mistral Ashby job boardMistral · hiring | ok | 20 | 235 | ||
| Google careers feed (DeepMind roles only)Google · hiring | ok | 10 | 149 | ||
| EDGAR full-text search for S-1s (“Anthropic”)market-wide · sec | ok | 3291 | 60 | ||
| EDGAR full-text search for S-1s (“OpenAI”)market-wide · sec | ok | 2206 | 95 | ||
| EDGAR submissions (SPCX, xAI’s parent)market-wide · sec | unchanged | 3297 | 86 | ||
| EDGAR submissions (MSFT)market-wide · sec | unchanged | 2209 | 86 | ||
| EDGAR submissions (AMZN)market-wide · sec | unchanged | 2209 | 88 | ||
| EDGAR submissions (NVDA)market-wide · sec | unchanged | 2209 | 87 | ||
| EDGAR submissions (GOOGL)market-wide · sec | unchanged | 2209 | 57 | ||
| EDGAR submissions (META)market-wide · sec | unchanged | 1220 | 35 | ||
| EDGAR submissions (ORCL)market-wide · sec | unchanged | 116 | 140 | ||
| EDGAR submissions (BABA, Qwen’s parent)market-wide · sec | unchanged | 107 | 14 | ||
| EDGAR XBRL company facts (SPCX, xAI’s parent)market-wide · revenue | unchanged | 2209 | 8 | ||
| OpenAI status page incidentsOpenAI · status | ok | 236 | 104 | ||
| Anthropic (Claude) status page incidentsAnthropic · status | ok | 236 | 74 | ||
| Google Cloud status incidents (Gemini / Vertex AI only)Google · status | unchanged | 236 | 1 | ||
| Mistral status page incidentsMistral · status | unchanged | 16 | 51 | ||
| DeepSeek status page incident history (RSS)DeepSeek · status | unchanged | 9 | 28 | ||
| DeepSeek status page incident history (Atom, for end times)DeepSeek · status · join table that adds to another source (no rows of its own) | unchanged | 9 | 0 | ||
| xAI status page incident history (RSS)xAI · status | unchanged | 10 | 100 | ||
| OpenAI misalignment reports and noticesOpenAI · disclosures | unchanged | 162 | 26 | ||
| EDGAR XBRL company facts (anthropic, resolved filer)Anthropic · revenue · built from the edgar-companyfacts template (a stored key filled into an audited URL) | unchanged | 557 | 0 | ||
| EDGAR submissions (anthropic, resolved filer)Anthropic · sec · built from the edgar-submissions template (a stored key filled into an audited URL) | unchanged | 557 | 2 | ||
| 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) | unchanged | 19 | 1 | ||
| 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) | unchanged | 18 | 1 | ||
| 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) | ok | 9 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 6 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 9 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 9 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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 fetched | no page | 0 | 0 | |
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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 fetched | no page | 0 | 0 | |
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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) | ok | 9 | 1 | ||
| 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) | ok | 9 | 1 | ||
| Google model page (gemini-4-argon)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL) | ok | 20 | 1 | ||
| Google model page (gemini-embedding-001)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL) | unchanged | 20 | 1 | ||
| Google model page (gemini-embedding-2)Google · pricing-catalog · built from the google-model-md template (a stored key filled into an audited URL) | unchanged | 20 | 1 | ||
| 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) | ok | 20 | 1 | ||
| 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 fetched | no page | 0 | 0 | |
| 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 fetched | no page | 0 | 0 | |
| 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) | ok | 20 | 1 | ||
| 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) | ok | 19 | 1 | ||
| 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) | unchanged | 86 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 3 | 1 | ||
| 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) | unchanged | 86 | 1 | ||
| 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) | unchanged | 139 | 1 | ||
| 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) | unchanged | 8 | 1 | ||
| 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) | unchanged | 111 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 111 | 1 | ||
| 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) | unchanged | 139 | 1 | ||
| 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) | unchanged | 139 | 1 | ||
| 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) | unchanged | 86 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 111 | 1 | ||
| 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) | unchanged | 67 | 1 | ||
| 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) | unchanged | 3 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 161 | 1 | ||
| 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) | unchanged | 86 | 1 | ||
| OpenAI model page (babbage-002)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 162 | 1 | ||
| OpenAI model page (davinci-002)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 162 | 1 | ||
| 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) | unchanged | 166 | 1 | ||
| 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 fetched | no page | 0 | 0 | |
| 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 fetched | no page | 0 | 0 | |
| 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) | unchanged | 162 | 1 | ||
| 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 fetched | no page | 0 | 0 | |
| 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 fetched | no page | 0 | 0 | |
| OpenAI model page (gpt-4.1)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| 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) | unchanged | 183 | 1 | ||
| 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) | unchanged | 166 | 1 | ||
| OpenAI model page (gpt-4o)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| 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 fetched | no page | 0 | 0 | |
| OpenAI model page (gpt-4o-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| OpenAI model page (gpt-5)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| OpenAI model page (gpt-5-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| OpenAI model page (gpt-5-nano)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| OpenAI model page (gpt-5-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| OpenAI model page (gpt-5.1)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| OpenAI model page (gpt-5.2)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 183 | 1 | ||
| 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) | unchanged | 183 | 1 | ||
| OpenAI model page (gpt-5.4)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | ok | 183 | 1 | ||
| 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) | unchanged | 183 | 1 | ||
| 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) | unchanged | 183 | 1 | ||
| 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) | unchanged | 184 | 1 | ||
| OpenAI model page (gpt-5.5)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | ok | 184 | 1 | ||
| 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) | unchanged | 184 | 1 | ||
| 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) | ok | 184 | 1 | ||
| 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) | ok | 184 | 1 | ||
| 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) | ok | 184 | 1 | ||
| OpenAI model page (gpt-6-astra)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | ok | 184 | 1 | ||
| OpenAI model page (gpt-6-luna)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | ok | 182 | 1 | ||
| OpenAI model page (gpt-6-sol)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | ok | 182 | 1 | ||
| 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) | ok | 155 | 1 | ||
| 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) | ok | 21 | 1 | ||
| OpenAI model page (o1)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 167 | 1 | ||
| OpenAI model page (o1-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 167 | 1 | ||
| OpenAI model page (o3)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 184 | 1 | ||
| OpenAI model page (o3-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 167 | 1 | ||
| OpenAI model page (o3-pro)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 184 | 1 | ||
| OpenAI model page (o4-mini)OpenAI · pricing-catalog · built from the openai-model-md template (a stored key filled into an audited URL) | unchanged | 167 | 1 | ||
| 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) | ok | 18 | 17 | ||
| 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) | ok | 18 | 19 | ||
| 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) | unchanged | 20 | 3 | ||
| 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) | unchanged | 20 | 2 | ||
| 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) | unchanged | 20 | 4 | ||
| 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) | unchanged | 20 | 4 |
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.
| Recipe | Last fetched | Last check | Observations | Caveat and terms |
|---|---|---|---|---|
| sec-revenue-netCloudflare · Cloudflare quarterly revenue, from SEC EDGAR company facts (CIK 0001477333) | unchanged | 32 | ||
| sec-revenue-akamAkamai · Akamai quarterly revenue, from SEC EDGAR company facts (CIK 0001086222) | ok | 39 | ||
| sec-revenue-fslyFastly · Fastly quarterly revenue, from SEC EDGAR company facts (CIK 0001517413) | unchanged | 33 | ||
| npm-wranglerCloudflare · Daily npm downloads of wrangler, the Cloudflare Workers CLI | failed | 568 | ||
| greenhouse-cloudflareCloudflare · Open roles per department on Cloudflare’s Greenhouse board | ok | 1218 | ||
| cloudflare-changelog-aiCloudflare · Cloudflare changelog entries for Workers AI and Agents | ok | 95 | ||
| sec-revenue-crwvCoreWeave · CoreWeave quarterly revenue, from SEC EDGAR company facts (CIK 0001769628) | unchanged | 10 | ||
| gpu-lambdaLambda · Lambda on-demand instance prices per GPU-hour (lambda.ai/pricing) | ok | 45 | ||
| gpu-coreweaveCoreWeave · CoreWeave on-demand instance prices, divided by GPUs per instance | unchanged | 8 | ||
| gpu-nebiusNebius · Nebius on-demand GPU-hour prices (nebius.com/prices) | unchanged | 10 | ||
| gpu-crusoeCrusoe · Crusoe on-demand GPU instance prices per GPU-hour | ok | 4 | ||
| gpu-togetherTogether AI · Together AI GPU Clusters on-demand prices per GPU-hour | ok | 8 | ||
| gpu-digitaloceanDigitalOcean · DigitalOcean GPU Droplet on-demand prices per GPU-hour | ok | 6 | ||
| gpu-verdaVerda · Verda (formerly DataCrunch) on-demand GPU instance prices | ok | 18 | ||
| gpu-azureMicrosoft Azure · Azure H100 VM pay-as-you-go prices per region (Azure Retail Prices API) | failed | 144 | ||
| gpu-oracleOracle Cloud · Oracle Cloud GPU pay-as-you-go list prices per GPU-hour (Price List API) | unchanged | 2 | ||
| ramp-ai-indexFrontier labs · Ramp AI Index: monthly share of US businesses on Ramp paying for AI, overall and by vendor | unchanged | 468 | ||
| npm-openaiOpenAI · Daily npm downloads of openai, the OpenAI SDK | ok | 543 | ||
| npm-anthropic-sdkAnthropic · Daily npm downloads of @anthropic-ai/sdk, the Anthropic SDK | failed | 542 | ||
| npm-google-genaiGoogle · Daily npm downloads of @google/genai, the Gemini SDK | failed | 542 | ||
| npm-mistralMistral · Daily npm downloads of @mistralai/mistralai, the Mistral SDK | failed | 542 | ||
| npm-claude-codeAnthropic · Daily npm downloads of @anthropic-ai/claude-code, Claude Code | ok | 543 | ||
| npm-codexOpenAI · Daily npm downloads of @openai/codex, the Codex CLI | failed | 542 | ||
| npm-gemini-cliGoogle · Daily npm downloads of @google/gemini-cli, the Gemini CLI | ok | 543 | ||
| npm-claude-agent-sdkAnthropic · Daily npm downloads of @anthropic-ai/claude-agent-sdk, the Claude Agent SDK | failed | 542 | ||
| npm-openai-agentsOpenAI · Daily npm downloads of @openai/agents, the OpenAI Agents SDK | failed | 542 | ||
| pypi-openaiOpenAI · Daily PyPI downloads of openai, the OpenAI SDK, without mirrors | unchanged | 212 | ||
| pypi-anthropicAnthropic · Daily PyPI downloads of anthropic, the Anthropic SDK, without mirrors | unchanged | 212 | ||
| pypi-google-genaiGoogle · Daily PyPI downloads of google-genai, the Gemini SDK, without mirrors | unchanged | 212 | ||
| pypi-mistralaiMistral · Daily PyPI downloads of mistralai, the Mistral SDK, without mirrors | unchanged | 212 | ||
| pypi-xai-sdkxAI · Daily PyPI downloads of xai-sdk, the xAI SDK, without mirrors | unchanged | 212 | ||
| pypi-claude-agent-sdkAnthropic · Daily PyPI downloads of claude-agent-sdk, the Claude Agent SDK, without mirrors | unchanged | 212 | ||
| pypi-openai-agentsOpenAI · Daily PyPI downloads of openai-agents, the OpenAI Agents SDK, without mirrors | unchanged | 212 | ||
| github-prs-claude-codeAnthropic · Public GitHub pull requests per day from Claude Code (search: "Generated with Claude Code") | ok | 4 | ||
| github-prs-codexOpenAI · Public GitHub pull requests per day from Codex (search: head:codex/) | ok | 4 | ||
| github-prs-julesGoogle · Public GitHub pull requests per day from Jules (search: author:app/google-labs-jules) | ok | 4 | ||
| epoch-data-centersFrontier labs · Epoch AI data centers: current power, H100e, owner and users per site | ok | 384 | ||
| epoch-data-center-timelinesFrontier labs · Epoch AI data centers: dated power and H100e estimates per site, planned dates included | ok | 579 | ||
| sec-msft-openaiOpenAI · Microsoft's XBRL facts on msft:OpenAIGlobalLlcMember, from its newest 10-Q or 10-K | unchanged | 8 | ||
| sec-amzn-anthropicAnthropic · Amazon's XBRL facts on amzn:AnthropicMember, from its newest 10-Q or 10-K | unchanged | 8 | ||
| limits-openai-gpt-6-astraOpenAI · Published API rate limits: OpenAI gpt-6-astra, per usage tier | unchanged | 9 | ||
| limits-openai-gpt-5-6-terraOpenAI · Published API rate limits: OpenAI gpt-5.6-terra, per usage tier | unchanged | 9 | ||
| limits-openai-gpt-5-6-lunaOpenAI · Published API rate limits: OpenAI gpt-5.6-luna, per usage tier | unchanged | 9 | ||
| limits-anthropicAnthropic · Published API rate limits: Anthropic, per model and usage tier, with batch limits and spend caps | unchanged | 195 | ||
| limits-xaixAI · Published API rate limits: xAI, per model and tier (T0–T4), with spend thresholds | ok | 544 | ||
| limits-metaMeta · Published API rate limits: Meta, per model (no tiers) | unchanged | 19 | ||
| pay-openaiOpenAI · Posted US salary bands on OpenAI's Ashby board: median midpoint overall, research and software engineering | ok | 12 | ||
| pay-anthropicAnthropic · Posted US salary bands on Anthropic's Greenhouse board: median midpoint overall, research and software engineering | ok | 12 | ||
| newsroom-openaiOpenAI · OpenAI’s newsroom feed: post titles, links and publication times | ok | 230 | ||
| newsroom-google-deepmindGoogle · Google DeepMind’s newsroom feed: post titles, links and publication times | unchanged | 30 | ||
| newsroom-metaMeta · Meta’s newsroom feed: post titles, links and publication times | ok | 13 | ||
| newsroom-mistralMistral · Mistral’s newsroom feed: post titles, links and publication times | unchanged | 15 |
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)
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.
| 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,050 | id, source_id, content_hash, raw_key, http_status, bytes, source_url, fetched_at | CSVJSONFull historySampleColumns |
| prices_latestThe current price and catalog row per SKU and source, as each vendor page stated it at our last check. | 509 | entity_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_at | CSVJSONSampleColumns |
| jobs_openEvery role currently listed on the job boards we track. A closed role leaves this table and shows up in changes. | 2,181 | entity_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_at | CSVJSONSampleColumns |
| 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. | 358 | entity_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_at | CSVJSONFull 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. | 26 | entity_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_at | CSVJSONFull 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. | 23 | entity_key, source_id, provider, entry_id, title, lines, discovered_on, disclosed_on, content_hash, snapshot_id, first_seen_at, source_url, fetched_at | CSVJSONFull 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. | 1 | entity_key, source_id, provider, cik, name, resolved_form, resolved_accession, resolved_file_date, content_hash, snapshot_id, first_seen_at, source_url, fetched_at | CSVJSONSampleColumns |
| 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. | 31 | entity_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_at | CSVJSONFull 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. | 170 | entity_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_at | CSVJSONFull 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. | 45 | entity_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_at | CSVJSONFull 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). | 52 | entity_key, source_id, provider, part, cik, entity_name, accession_no, form, filed, basis, customer, start, end, unaudited, pct, first_seen_at, source_url, fetched_at | CSVJSONFull 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. | 26 | entity_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_at | CSVJSONFull 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. | 176 | entity_key, source_id, provider, part, cik, entity_name, accession_no, form, filed, section, heading, change, previous, first_seen_at, source_url, fetched_at | CSVJSONFull 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,742 | id, entity_key, entity_type, provider, change_type, before_hash, after_hash, before_json, after_json, detected_at, source_url, fetched_at | CSVJSONFull 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,084 | id, capture_id, entity_key, provider, content_hash, payload, captured_at, original_url, basis, source_url, fetched_at | CSVJSONFull 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,460 | id, capture_id, provider, scope, label, department_id, department, open_roles, captured_at, original_url, basis, source_url, fetched_at | CSVJSONFull 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. | 870 | id, era, provider, original_url, captured_at, status, detail, content_hash, raw_key, bytes, rows, axis, source_url, fetched_at | CSVJSONFull historySampleColumns |
| alertsEvery alert fired, with the change ids it cites and the rule that produced it. | 667 | id, severity, headline, explanation, change_ids, rule, created_at, source_url, fetched_at | CSVJSONFull 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,551 | thesis_id, claim_id, date, value, detail, computed_at, source_url, fetched_at | CSVJSONFull 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. | 53 | id, thesis_id, claim_id, subject, change_id, provider, verdict, rationale, facts, detected_at, judged_at, source_url, fetched_at | CSVJSONFull 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. | 718 | id, alert_id, kind, title, snippet, outlet, url, published_at, search_id, found_at, source_url, fetched_at | CSVJSONFull 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. | 623 | id, candidate_id, alert_id, same_event, rationale, judged_at, source_url, fetched_at | CSVJSONFull 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,161 | id, recipe_id, company, key, date, value, payload, raw_key, first_seen_at, source_url, fetched_at | CSVJSONFull 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,245 | id, ticker, cik, concept, dims, start, end, value, unit, form, filed, accession_no, basis, raw_key, first_seen_at, source_url, fetched_at | CSVJSONFull 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. | 367 | series_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_at | CSVJSONFull 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,557 | id, scope, source_id, started_at, status, detail, snapshot_id, added, removed, modified, source_url | CSVJSONFull 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. | 18 | entity, entity_name, entity_kind, relationship, issuer, cik, symbol, exchange, listing_status, note, mic, figi, disclosed_in, source_url, checked_on | CSVJSONSampleColumns |
| 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. | 25 | 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 | CSVJSONSampleColumns |
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.
- Grain
- One row per fetch of a source.
- Key
- id
- Updates
- Model catalogs up to every 5 minutes, SEC feeds every 30, everything else every 6 hours.
- Time
- Event time none, knowledge time fetched_at.
- as_of
- Rows with fetched_at at or before as_of.
- History
- From our first check of each source.
- Download
- Downloads the last 90 days by default, dated by fetched_at, when we read the page. Add ?history=full for every row.
- Join on
- No company column.
- Commercial use
- Yes. These are records of our own checks. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of snapshots Column Meaning idtext · key The fetch: <source_id>:<fetched_at>. source_idtext The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. content_hashtext SHA-256 (hex) of the fetched body. raw_keytext Key of the raw body in this site’s object store (R2). A fetch that found the same content points at the existing object. http_statusinteger · nullable The response’s HTTP status. Null where none was recorded. bytesinteger · nullable Size of the fetched body. Null where none was recorded.Unit: bytes source_urltext · provenance The URL fetched. fetched_atISO-8601 timestamp · provenance When the fetch ran, in UTC. - Grain
- One row per SKU per source, as of the last check.
- Key
- entity_key, source_id
- Updates
- Model catalogs every 5 minutes when they change, every source every 6 hours.
- Time
- Event time effective_from, knowledge time first_seen_at.
- as_of
- Rebuilt from the current rows and the change log. For each key we take the content the first change after as_of replaced, else the current row if it was written by then. The view gains an as_of_verified column. False marks a key whose state the log does not confirm.
- History
- Current rows only. Past prices are in changes (from our first check) and archived_prices (Internet Archive copies from January 2023).
- Download
- Downloads whole, since it holds one current row per SKU.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- It depends on the source. Of the sources it reads, 4 are ours to license and 14 aren’t in any paid offer. A paid license covers only what comes from sources that are ours.
Columns of prices_latest Column Meaning entity_keytext · key The row’s key across polls, model:<provider>:<model_slug>, with :<tier> when the SKU has one. With source_id it identifies the row. A models page and a pricing page can both list a SKU, so one entity_key can have two rows. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. model_slugtext The model’s identifier as the vendor’s page prints it. tiertext · nullable The price tier, where a model has several (Google’s standard, batch, flex, and priority, or xAI’s long_context). Null for a single-tier SKU. context_windowtext · nullable The context window as printed (“500k”, “1M”), not converted to tokens. Null where the page states none. input_per_mtoknumber · nullable List price of input tokens. Null where the page prints none.Unit: USD per million tokens cached_input_per_mtoknumber · nullable List price of cached input tokens (a cache hit). Null where the page prints none.Unit: USD per million tokens output_per_mtoknumber · nullable List price of output tokens. Null where the page prints none.Unit: USD per million tokens currencytext Always USD. effective_fromdate · nullable The day a scheduled price takes effect, where the page announces one. Null for the price in force. effective_untildate · nullable The day the page says the price in force is replaced. Null when no change is scheduled. notestext · nullable Qualifiers the page prints beside the row (cache-write prices, promotions, deprecations), verbatim. Null where it prints none. content_hashtext SHA-256 (hex) of the row’s content. It changes when the content does, and each change is a row in changes. snapshot_idtext The snapshots.id of the fetch whose parse produced the row’s current content. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. as_of_verifiedboolean · as_of only With ?as_of= only. False where the newest change at or before as_of disagrees with the rebuilt row, so the row may not be what the store held then. source_urltext · provenance The URL the row’s current content was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per open role per job board.
- Key
- entity_key, source_id
- Updates
- Every 6 hours, with the full check of every source.
- Time
- Event time published_at, knowledge time first_seen_at.
- as_of
- Rebuilt from the current rows and the change log. For each key we take the content the first change after as_of replaced, else the current row if it was written by then. The view gains an as_of_verified column. False marks a key whose state the log does not confirm.
- History
- Current roles only. Roles that closed are in changes, from our first check. Open-role counts before then are in archived_hiring (Internet Archive copies from January 2023).
- Download
- Downloads whole, since it holds the roles listed now.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of jobs_open Column Meaning entity_keytext · key The row’s key across polls, job:<provider>:<job_id>. With source_id it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. job_idtext The board’s own job id: an Ashby UUID, a Greenhouse number, or a Google careers id. titletext The role title, verbatim. departmenttext · nullable The department as the board names it (on Google’s feed, its categories joined by commas). Null where the board gives none. teamtext · nullable The team within the department. Ashby boards only. Null elsewhere. locationtext · nullable The location text, several locations in one string, verbatim. Null where the board gives none. employment_typetext · nullable The employment type as the board labels it (FullTime, …). Null where the board does not carry one, as Greenhouse does not. published_atISO-8601 timestamp · nullable When the board says the role was first published, with the board’s own offset. updated_atISO-8601 timestamp · nullable When the board says the listing last changed, with its own offset. Null where the board gives none (Google’s feed). company_nametext · nullable The employer the board prints, verbatim. Every xAI row says SpaceXAI: that board lists SpaceX and xAI roles together. content_hashtext SHA-256 (hex) of the row’s content. It changes when the content does, and each change is a row in changes. snapshot_idtext The snapshots.id of the fetch whose parse produced the row’s current content. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. as_of_verifiedboolean · as_of only With ?as_of= only. False where the newest change at or before as_of disagrees with the rebuilt row, so the row may not be what the store held then. source_urltext · provenance The URL the row’s current content was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per status-page incident.
- Key
- entity_key, source_id
- Updates
- Every 6 hours, with the full check of every source.
- Time
- Event time started_at, knowledge time first_seen_at.
- as_of
- Rebuilt from the current rows and the change log. For each key we take the content the first change after as_of replaced, else the current row if it was written by then. The view gains an as_of_verified column. False marks a key whose state the log does not confirm.
- History
- What each feed listed at our first check, and every incident since.
- Download
- Downloads the last 90 days by default, dated by started_at, when the incident began (first_seen_at where the feed gives no start). Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- It depends on the source. Of the sources it reads, 1 is ours to license and 6 aren’t in any paid offer. A paid license covers only what comes from sources that are ours.
Columns of incidents Column Meaning entity_keytext · key The row’s key across polls, incident:<provider>:<incident_id>. With source_id it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. incident_idtext The status page’s own incident id. titletext The incident title, verbatim. impacttext · nullable The vendor’s impact or severity word, verbatim and not mapped across vendors. Statuspage uses none, minor, major, and critical. Google Cloud uses low, medium, and high. Null where the feed publishes none, as Anthropic’s Atom feed does. statustext The vendor’s status word, verbatim. Statuspage uses investigating, identified, monitoring, resolved, and postmortem. Google Cloud gives the latest update’s status (AVAILABLE once resolved). started_atISO-8601 timestamp When the incident started, as the feed states it. resolved_atISO-8601 timestamp · nullable When the incident was resolved, as the feed states it. Null while open. componentsJSON The affected components (Statuspage) or products (Google Cloud): an array of names, sorted, possibly empty. incident_urltext The incident’s own page on the status site. content_hashtext SHA-256 (hex) of the row’s content. It changes when the content does, and each change is a row in changes. snapshot_idtext The snapshots.id of the fetch whose parse produced the row’s current content. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. as_of_verifiedboolean · as_of only With ?as_of= only. False where the newest change at or before as_of disagrees with the rebuilt row, so the row may not be what the store held then. source_urltext · provenance The URL the row’s current content was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per entry on a lab’s misalignment-disclosure index.
- Key
- entity_key, source_id
- Updates
- Every 6 hours, with the full check of every source.
- Time
- Event time listed_on, knowledge time first_seen_at.
- as_of
- Rebuilt from the current rows and the change log. For each key we take the content the first change after as_of replaced, else the current row if it was written by then. The view gains an as_of_verified column. False marks a key whose state the log does not confirm.
- History
- Every entry the index lists, back to its first.
- Download
- Downloads the last 90 days by default, dated by listed_on, the date the index prints (first_seen_at where it prints none). Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- No. It stays on the free site and isn’t in any paid offer.
Columns of disclosures Column Meaning entity_keytext · key The row’s key across polls, disclosure:<provider>:<kind>:<entry_id>. With source_id it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. kindtext report or notice. entry_idtext The entry’s id on the index: a report’s slug, or a notice’s id without “notice-”. titletext The entry’s title, verbatim. summarytext The index’s one-sentence summary, verbatim. modeltext · nullable The model the report concerns, verbatim. Null on a notice. observed_duringtext · nullable The context the behavior was observed in, verbatim. Null on a notice. listed_ondate The date the index prints beside the entry: a report’s last update, a notice’s posting date. It moves when a report is revised. entry_urltext The entry’s own page. content_hashtext SHA-256 (hex) of the row’s content. It changes when the content does, and each change is a row in changes. snapshot_idtext The snapshots.id of the fetch whose parse produced the row’s current content. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. as_of_verifiedboolean · as_of only With ?as_of= only. False where the newest change at or before as_of disagrees with the rebuilt row, so the row may not be what the store held then. source_urltext · provenance The URL the row’s current content was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per disclosure report page.
- Key
- entity_key, source_id
- Updates
- Every 6 hours, with the full check of every source.
- Time
- Event time disclosed_on, knowledge time first_seen_at.
- as_of
- Rebuilt from the current rows and the change log. For each key we take the content the first change after as_of replaced, else the current row if it was written by then. The view gains an as_of_verified column. False marks a key whose state the log does not confirm.
- History
- Every report the index links to.
- Download
- Downloads the last 90 days by default, dated by disclosed_on, else discovered_on, else first_seen_at. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- No. It stays on the free site and isn’t in any paid offer.
Columns of disclosure_timelines Column Meaning entity_keytext · key The row’s key across polls, disclosure_timeline:<provider>:<entry_id>. With source_id it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. entry_idtext The report’s slug. It joins disclosures.entry_id. titletext The report page’s own title, verbatim. linesJSON Every “Label: value” line of the page’s metadata, verbatim and in page order, minus “Report updated”: an array of {label, value} objects. discovered_ondate · nullable The discovery date, from the line under any label the vendor uses for it, when that value is a single date. Null otherwise. disclosed_ondate · nullable A printed disclosure date, when the page has one that is a single date. content_hashtext SHA-256 (hex) of the row’s content. It changes when the content does, and each change is a row in changes. snapshot_idtext The snapshots.id of the fetch whose parse produced the row’s current content. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. as_of_verifiedboolean · as_of only With ?as_of= only. False where the newest change at or before as_of disagrees with the rebuilt row, so the row may not be what the store held then. source_urltext · provenance The URL the row’s current content was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per lab whose CIK we found in its own registration filing.
- Key
- entity_key, source_id
- Updates
- Every 30 minutes with the SEC feeds, and again every 6 hours.
- Time
- Event time resolved_file_date, knowledge time first_seen_at.
- as_of
- Rebuilt from the current rows and the change log. For each key we take the content the first change after as_of replaced, else the current row if it was written by then. The view gains an as_of_verified column. False marks a key whose state the log does not confirm.
- History
- From the first registration filing we found for each lab.
- Download
- Downloads whole, since it’s a lookup of one CIK per lab.
- Join on
- provider to entity_identifiers.entity_id, cik to entity_identifiers.cik.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of filers Column Meaning entity_keytext · key The row’s key across polls, filer:<provider>, one per lab. With source_id it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. ciktext The filer’s SEC CIK, ten digits, zero-padded. nametext EDGAR’s display name for the filer, verbatim. resolved_formtext The form of the filing the CIK was read from (S-1, S-1/A). resolved_accessiontext That filing’s EDGAR accession number. resolved_file_datedate The day that filing was filed. content_hashtext SHA-256 (hex) of the row’s content. It changes when the content does, and each change is a row in changes. snapshot_idtext The snapshots.id of the fetch whose parse produced the row’s current content. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. as_of_verifiedboolean · as_of only With ?as_of= only. False where the newest change at or before as_of disagrees with the rebuilt row, so the row may not be what the store held then. source_urltext · provenance The URL the row’s current content was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per XBRL revenue fact per filing.
- Key
- entity_key, source_id
- Updates
- Every 6 hours, with the full check of every source.
- Time
- Event time end, knowledge time first_seen_at.
- as_of
- Rebuilt from the current rows and the change log. For each key we take the content the first change after as_of replaced, else the current row if it was written by then. The view gains an as_of_verified column. False marks a key whose state the log does not confirm.
- History
- Every revenue fact in EDGAR company facts, as far back as each filer tagged it.
- Download
- Downloads the last 90 days by default, dated by end, the period end. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id, cik to entity_identifiers.cik.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of revenue_facts Column Meaning entity_keytext · key The row’s key across polls, revenue:<cik>:<tag>:<accession_no>:<start>:<end>. With source_id it identifies the row. A segment fact’s key ends with its segment member (:goog:GoogleCloudMember). There’s no segment column, so the key is what tells a segment value from the consolidated one. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. ciktext The filer’s SEC CIK, ten digits, zero-padded. entity_nametext The filer’s name as EDGAR or the filing gives it. taxonomytext us-gaap for an XBRL fact (the SEC’s tagged financial data). prospectus for a figure read off the statement of operations in a registration filing that tags no financials. tagtext The XBRL revenue tag, or for prospectus the statement’s row label verbatim. Filers switch tags between years, so a series can span several. unittext Always USD. startdate First day of the period the value covers. enddate Last day of the period the value covers. valnumber The filer’s own value for the period, in US dollars, never scaled or rounded.Unit: USD accession_notext The filing that reported the value. A restatement is a new row under its own accession. fyinteger · nullable The fiscal year as the filer tagged it. fptext · nullable The fiscal period as the filer tagged it: FY or Q1 to Q4. formtext The reporting filing’s form type (10-K, 10-Q, S-1, …). fileddate The day the reporting filing was filed. frametext · nullable SEC’s calendar frame (CY2026Q2) when this fact is the canonical one for it. Null otherwise. whitelist_ciktext · nullable The CIK again when the filer is on the sources.yaml whitelist of filers whose filings alert. Null otherwise. content_hashtext SHA-256 (hex) of the row’s content. It changes when the content does, and each change is a row in changes. snapshot_idtext The snapshots.id of the fetch whose parse produced the row’s current content. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. as_of_verifiedboolean · as_of only With ?as_of= only. False where the newest change at or before as_of disagrees with the rebuilt row, so the row may not be what the store held then. source_urltext · provenance The URL the row’s current content was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per filing, period, and statement line.
- Key
- entity_key, source_id, part
- Updates
- Every 30 minutes with the SEC feeds, and again every 6 hours.
- Time
- Event time filed, knowledge time first_seen_at.
- as_of
- as_of answers 400 for this table. This view is built from the current filing rows, and we can’t rebuild its past versions yet.
- History
- From each lab’s first registration filing we read (Anthropic’s S-1 of 2026-10-26).
- Download
- Downloads the last 90 days by default, dated by filed, the filing date. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id, cik to entity_identifiers.cik.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of prospectus_statements Column Meaning entity_keytext · key The filing’s entity, statement:<cik>:<accession_no>:<start>:<end>. With source_id and part it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab that filed the registration statement. partinteger · key The row’s position within its entity, from 0, in the order the filing prints it. ciktext The registrant’s SEC CIK, ten digits, zero-padded. entity_nametext The registrant’s name as the filing prints it. accession_notext The registration filing’s EDGAR accession number. formtext The filing’s form type: S-1 or S-1/A. fileddate The day the filing was filed with the SEC. startdate First day of the period. enddate Last day of the period. unauditedboolean True for an interim period, which registration statements print unaudited. unitstext The statement’s units line, verbatim (“in millions, except per share data”). val is already scaled out of it. line_keytext A canonical key where the label is a known one (revenue, total_operating_expenses, operating_income, net_income, …), else the label slugged. labeltext The line’s label as the statement prints it, verbatim. valnumber · nullable The line’s value in whole units, scaled out of the printed millions or thousands. Negative where the statement prints parentheses, null where it prints a dash.Unit: USD, USD per share, or shares, as unit says unittext USD, USD/share, or shares. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. source_urltext · provenance The registration document on EDGAR the row was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per filing, schedule line, and year bucket.
- Key
- entity_key, source_id, part
- Updates
- Every 30 minutes with the SEC feeds, and again every 6 hours.
- Time
- Event time filed, knowledge time first_seen_at.
- as_of
- as_of answers 400 for this table. This view is built from the current filing rows, and we can’t rebuild its past versions yet.
- History
- From each lab’s first registration filing we read (Anthropic’s S-1 of 2026-10-26).
- Download
- Downloads the last 90 days by default, dated by filed, the filing date. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id, cik to entity_identifiers.cik.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of prospectus_commitments Column Meaning entity_keytext · key The filing’s entity, commitment:<accession_no>:<schedule>:<as_of, or undated>. With source_id and part it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab that filed the registration statement. partinteger · key The row’s position within its entity, from 0, in the order the filing prints it. ciktext The registrant’s SEC CIK, ten digits, zero-padded. entity_nametext The registrant’s name as the filing prints it. accession_notext The registration filing’s EDGAR accession number. formtext The filing’s form type: S-1 or S-1/A. fileddate The day the filing was filed with the SEC. scheduletext contractual_obligations (MD&A’s table), purchase_commitments (the commitments note’s audited schedule), purchase_commitments_interim (the note’s one-sentence interim total), or obligations_aggregate (MD&A’s one-sentence total). as_ofdate · nullable The date the schedule is stated as of. Null when its sentence names none. auditedboolean True for a schedule in the audited notes. approximateboolean True when the filing itself calls the figure approximate. linetext The obligation’s label, verbatim. buckettext When the amount falls due, as the filing labels it (“2026”, “Thereafter”), or Total for the line’s total. valnumber The amount in US dollars, scaled out of the printed millions or thousands.Unit: USD statementtext · nullable For a one-figure schedule, the sentence it was read from, verbatim. Null for a table. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. source_urltext · provenance The registration document on EDGAR the row was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per filing, basis, customer, and period.
- Key
- entity_key, source_id, part
- Updates
- Every 30 minutes with the SEC feeds, and again every 6 hours.
- Time
- Event time filed, knowledge time first_seen_at.
- as_of
- as_of answers 400 for this table. This view is built from the current filing rows, and we can’t rebuild its past versions yet.
- History
- From each lab’s first registration filing we read (Anthropic’s S-1 of 2026-10-26).
- Download
- Downloads the last 90 days by default, dated by filed, the filing date. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id, cik to entity_identifiers.cik.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of prospectus_concentration Column Meaning entity_keytext · key The filing’s entity, concentration:<accession_no>:<basis>. With source_id and part it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab that filed the registration statement. partinteger · key The row’s position within its entity, from 0, in the order the filing prints it. ciktext The registrant’s SEC CIK, ten digits, zero-padded. entity_nametext The registrant’s name as the filing prints it. accession_notext The registration filing’s EDGAR accession number. formtext The filing’s form type: S-1 or S-1/A. fileddate The day the filing was filed with the SEC. basistext revenue or accounts_receivable. customertext The customer as the filing names it (“Customer A”). startdate · nullable First day of the revenue period. Null for a receivables balance. enddate Last day of the revenue period, or the balance date. unauditedboolean True for an unaudited interim column. pctnumber · nullable The customer’s share of revenue or of receivables. Null is the filing’s “*”: under 10%. It isn’t zero.Unit: percent, 0 to 100 first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. source_urltext · provenance The registration document on EDGAR the row was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per filing and risk-factor heading.
- Key
- entity_key, source_id, part
- Updates
- Every 30 minutes with the SEC feeds, and again every 6 hours.
- Time
- Event time filed, knowledge time first_seen_at.
- as_of
- as_of answers 400 for this table. This view is built from the current filing rows, and we can’t rebuild its past versions yet.
- History
- From each lab’s first registration filing we read (Anthropic’s S-1 of 2026-10-26).
- Download
- Downloads the last 90 days by default, dated by filed, the filing date. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id, cik to entity_identifiers.cik.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of prospectus_risk_factors Column Meaning entity_keytext · key The filing’s entity, risk_factors:<accession_no>. With source_id and part it identifies the row. source_idtext · key The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. providertext The lab that filed the registration statement. partinteger · key The row’s position within its entity, from 0, in the order the filing prints it. ciktext The registrant’s SEC CIK, ten digits, zero-padded. entity_nametext The registrant’s name as the filing prints it. accession_notext The registration filing’s EDGAR accession number. formtext The filing’s form type: S-1 or S-1/A. fileddate The day the filing was filed with the SEC. sectiontext The “Risks Related to …” subsection the heading sits under, verbatim. headingtext The risk-factor heading, verbatim. changetext · nullable Against the same filer’s previous filing: unchanged, added, reworded, or removed (a heading only the previous filing printed). Null on a filer’s first filing. previoustext · nullable For a reworded heading, the previous filing’s words, verbatim. Null otherwise. first_seen_atISO-8601 timestamp When a fetch first produced the row, in UTC. It never changes. source_urltext · provenance The registration document on EDGAR the row was read from. fetched_atISO-8601 timestamp · provenance When the fetch that produced the row’s current content ran, in UTC. A later fetch that finds the same content doesn’t move it. source_runs has every check. - Grain
- One row per tracked item added, removed, or modified.
- Key
- id
- Updates
- A check that finds a difference adds rows. Rows are never edited.
- Time
- Event time none, knowledge time detected_at.
- as_of
- Rows with detected_at at or before as_of.
- History
- From our first check of each source.
- Download
- Downloads the last 90 days by default, dated by detected_at, when we saw the change. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- It depends on the source. Of the sources it reads, 23 are ours to license, 1 passes on under upstream terms (CC BY 4.0), and 21 aren’t in any paid offer. A paid license covers only what comes from sources that are ours.
Columns of changes Column Meaning idtext · key SHA-256 (hex) of the entity key and the two content hashes, so the same change is never logged twice. A filed_fact change hashes its series, period, and accession instead. entity_keytext The changed row’s entity_key, as the views above use it. entity_typetext The kind of row: model, job, incident, disclosure, disclosure_timeline, filer, revenue, filing, document, offering, statement, commitment, concentration, shares, risk_factors, recommendation, or filed_fact (a hyperscaler series point a new filing moved, cited by its alert). OpenRouter ranking rows are left out. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. change_typetext added, removed, or modified. before_hashtext · nullable The row’s content_hash before the change. Null when added. after_hashtext · nullable The row’s content_hash after the change. Null when removed. before_jsonJSON · nullable JSON text (a string in the JSON export too): the row’s content before the change. Null when added. after_jsonJSON · nullable JSON text (a string in the JSON export too): the row’s content after the change. Null when removed. detected_atISO-8601 timestamp When the fetch that observed the change ran, in UTC. Same instant as fetched_at. source_urltext · provenance The URL whose fetch observed the change. fetched_atISO-8601 timestamp · provenance When that fetch ran, in UTC. - Grain
- One row per SKU per Internet Archive copy we could read.
- Key
- id
- Updates
- Once per backfill run, not on a schedule.
- Time
- Event time captured_at, knowledge time fetched_at.
- as_of
- Rows with captured_at at or before as_of: when the Internet Archive saw the page, not when we read the copy (fetched_at, always later). So a backtest gets the page as it stood then, which this site did not hold at the time.
- History
- Archived only. From the oldest copy we could read. The backfill looks at one copy a week from January 2023 to 2026-08-25.
- Download
- Downloads the last 90 days by default, dated by captured_at, when the Internet Archive saw the page. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- No. It stays on the free site and isn’t in any paid offer.
Columns of archived_prices Column Meaning idtext · key The first 32 hex characters of the SHA-256 of capture_id and entity_key. capture_idtext The copy the row was read from: <era>:<14-digit Wayback timestamp>, as in archive_captures. entity_keytext The SKU: model:<provider>:<slug>[:<tier>], the same key the live prices use, so /prices/<key> shows this row before the live ones. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. content_hashtext SHA-256 (hex) of payload. Two copies with the same hash printed the same row. payloadJSON The row as the page printed it, in the prices_latest fields: model_slug, tier, the three $/MTok prices (null where the page printed none), currency, and notes. captured_atISO-8601 timestamp When the Internet Archive captured the page, in UTC: the moment these prices were on it. original_urltext The lab’s own pricing page the Archive captured. basistext Always archived: read from a copy, not observed by this site. source_urltext · provenance The Wayback Machine copy (https://web.archive.org/web/<timestamp>id_/<original_url>). fetched_atISO-8601 timestamp · provenance When we read the copy back from the Archive, in UTC. - Grain
- One board row per Internet Archive copy of a lab’s job board we could read, and one row per department when the copy lists every role.
- Key
- id
- Updates
- Once per backfill run, not on a schedule.
- Time
- Event time captured_at, knowledge time fetched_at.
- as_of
- Rows with captured_at at or before as_of: when the Internet Archive saw the board, not when we read the copy (fetched_at, always later). So a backtest gets the board as it stood then, which this site did not hold at the time.
- History
- Archived only. From the oldest copy we could read (OpenAI 2023-01-08). The backfill looks at one copy a week from January 2023 to the day we began reading each board.
- Download
- Downloads the last 90 days by default, dated by captured_at, when the Internet Archive saw the board. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- No. It stays on the free site and isn’t in any paid offer.
Columns of archived_hiring Column Meaning idtext · key The first 32 hex characters of the SHA-256 of capture_id and the row’s scope or department. capture_idtext The copy the count was read from: <era>:<14-digit Wayback timestamp>, as in archive_captures. providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. scopetext board (open roles on the whole board; one per copy) or department (one per department, when the copy lists every role; they sum to the board row). labeltext · nullable The department as the board printed it then. Null on the board row. department_idtext · nullable The board’s own id for the department (Greenhouse, Ashby), where the copy prints one. Null on the board row and on Lever boards. departmenttext · nullable The live department the row files under: today’s label for the same department_id where the board’s id ties them, else the label as printed. Null on the board row. open_rolesinteger Open roles the copy listed (department rows) or stated (board row).Unit: roles captured_atISO-8601 timestamp When the Internet Archive captured the board, in UTC: the moment these roles were open on it. original_urltext The lab’s own job board the Archive captured. basistext Always archived: read from a copy, not observed by this site. source_urltext · provenance The Wayback Machine copy (https://web.archive.org/web/<timestamp>id_/<original_url>). fetched_atISO-8601 timestamp · provenance When we read the copy back from the Archive, in UTC. - Grain
- One row per Internet Archive copy the backfill considered.
- Key
- id
- Updates
- Once per backfill run, not on a schedule.
- Time
- Event time captured_at, knowledge time fetched_at.
- as_of
- Rows with captured_at at or before as_of: when the Internet Archive saw the page, not when we read the copy.
- History
- Archived only. One copy a week per lab pricing page or job board, from January 2023 to the day we began reading it.
- Download
- Downloads the last 90 days by default, dated by captured_at, when the Internet Archive saw the page. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- No. It stays on the free site and isn’t in any paid offer.
Columns of archive_captures Column Meaning idtext · key The copy: <era>:<14-digit Wayback timestamp>. eratext Which shape of the lab’s pricing page or job board the copy is read as (layers/terminal/server/pipeline/archive/eras.ts, hiring-eras.ts). providertext The lab the row belongs to: openai, anthropic, google, xai, meta, mistral, deepseek, alibaba, moonshot, or other. original_urltext The lab’s own pricing page or job board the Archive captured. captured_atISO-8601 timestamp When the Internet Archive captured the page, in UTC. statustext parsed (its rows are in archived_prices or archived_hiring, by axis) or skipped (no rows; detail says why). detailtext · nullable Why a skipped copy was skipped, in the parser’s or the fetch’s own words. On a read job board, what it held beyond the counts (a paged list: total only). content_hashtext · nullable SHA-256 (hex) of the copy’s text. Null when the fetch failed. raw_keytext · nullable Key of the saved copy in this site’s object store (R2). Null when the fetch failed. bytesinteger · nullable Size of the copy as read. Null when the fetch failed.Unit: bytes rowsinteger How many rows the copy gave, in archived_prices or archived_hiring (see axis). axistext pricing (a lab’s pricing page; rows in archived_prices) or hiring (a lab’s job board; rows in archived_hiring). source_urltext · provenance The Wayback Machine copy (https://web.archive.org/web/<timestamp>id_/<original_url>). fetched_atISO-8601 timestamp · provenance When we read the copy (or tried to), in UTC. - Grain
- One row per alert.
- Key
- id
- Updates
- Written when a check finds a change that meets a rule. Judged alerts follow when the judge runs.
- Time
- Event time none, knowledge time created_at.
- as_of
- Alerts with created_at at or before as_of. A judge alert (rule agent-judge) is written by a judge run after the changes it cites, and is held back until a judge run that accepted alerts had started (judge_runs.started_at). One that a later run wrote about an older change can still appear early, because an alert row doesn’t record which run wrote it.
- History
- From our first check of each source.
- Download
- Downloads the last 90 days by default, dated by created_at, when the alert was written. Add ?history=full for every row.
- Join on
- No company column.
- Commercial use
- It depends on the source. Of the sources it reads, 23 are ours to license, 1 passes on under upstream terms (CC BY 4.0), and 21 aren’t in any paid offer. A paid license covers only what comes from sources that are ours.
Columns of alerts Column Meaning idtext · key SHA-256 (hex) of what the alert is about. Its page is /alerts/<id>. severitytext info, notable, or critical. headlinetext The alert in one line. explanationtext Why it matters. It cites only fields in the changes it cites. change_idsJSON JSON text (a string in the JSON export too): an array of the changes.id it cites. ruletext What wrote it: agent-judge (the judge routine), or a deterministic rule: s1-floor, periodic-floor, cik-resolved, model-floor, prospectus-floor, hiring-rollup, filed-fact-floor. created_atISO-8601 timestamp When the alert counts from: the detection of the newest change it cites, in UTC. source_urltext · provenance The URL of the change the alert is stamped from. fetched_atISO-8601 timestamp · provenance When that change’s fetch ran, in UTC. - Grain
- One row per thesis claim and data date.
- Key
- claim_id, date
- Updates
- Every 6 hours, with the full check of every source.
- Time
- Event time date, knowledge time computed_at.
- as_of
- as_of answers 400 for this table. A claim reading is rewritten in place while its data is revised, and the value it replaced is not kept.
- History
- From the first data date each claim’s recipe reads.
- Download
- Downloads the last 90 days by default, dated by date, the data date. Add ?history=full for every row.
- Join on
- No company column.
- Commercial use
- It depends on the source. Of the sources it reads, 42 are ours to license, 20 pass on under upstream terms (CC BY 4.0), and 35 aren’t in any paid offer. A paid license covers only what comes from sources that are ours.
Columns of claim_readings Column Meaning thesis_idtext The thesis the claim belongs to. Its page is /theses/<thesis_id>. claim_idtext · key The claim, unique across theses. datedate · key The data date the reading is for. valuenumber The measured value the claim’s kill condition is checked against. The thesis page gives the claim’s unit.Unit: the claim’s own: a 0..1 share, a ratio, a growth rate, a count, USD, or USD per million tokens detailJSON JSON text (a string in the JSON export too): the inputs behind the value, shaped by the claim’s signal. computed_atISO-8601 timestamp When the reading was last computed with a different value or detail, in UTC. source_urltext · provenance The source of the reading’s newest input. fetched_atISO-8601 timestamp · provenance When that input was fetched, in UTC. - Grain
- One row per candidate event the judge rated for a claim.
- Key
- id
- Updates
- When the judge runs.
- Time
- Event time detected_at, knowledge time judged_at.
- as_of
- Verdicts with detected_at and judged_at both at or before as_of: a verdict is held back until it was judged.
- History
- From our first check of each source.
- Download
- Downloads the last 90 days by default, dated by detected_at, when we saw the change it rates. Add ?history=full for every row.
- Join on
- provider to entity_identifiers.entity_id.
- Commercial use
- It depends on the source. Of the sources it reads, 42 are ours to license, 20 pass on under upstream terms (CC BY 4.0), and 35 aren’t in any paid offer. A paid license covers only what comes from sources that are ours.
Columns of claim_verdicts Column Meaning idtext · key SHA-256 (hex) of claim_id and subject: one verdict per claim and subject. thesis_idtext The thesis the claim belongs to. claim_idtext The judged claim. subjecttext What the verdict rates: the changes.id of a price cut, the entity_key of an incident or disclosure (so an incident updated twice is rated once), or the recipe_observations.id of a recipe item. change_idtext The changes.id, or recipe_observations.id, of the record the judge was shown. providertext The company the event concerns: a lab id, or a company id such as cloudflare. verdicttext The judge’s verdict, from the claim’s own set: competitive or generational for a price cut, material or not-material for an incident or disclosure. A recipe claim lists its own. rationaletext The judge’s reason, at most 600 characters, grounded against the record and the facts. factsJSON JSON text (a string in the JSON export too): what the Worker computed about the event, such as a cut’s size or an outage’s hours. detected_attext When the rated record was detected: the change’s detected_at (an ISO-8601 timestamp), or for a recipe item the observation’s date (YYYY-MM-DD). judged_atISO-8601 timestamp When the judge run that wrote the verdict ran, in UTC. source_urltext · provenance The URL the rated record was read from. fetched_atISO-8601 timestamp · provenance When that record was fetched, in UTC. - Grain
- One row per article or newsroom post found for an alert.
- Key
- id
- Updates
- One search every 5 minutes, for the oldest alert whose window has closed.
- Time
- Event time published_at, knowledge time found_at.
- as_of
- Rows with found_at at or before as_of.
- History
- From the first notable or critical alert.
- Download
- Downloads the last 90 days by default, dated by found_at, when we found the article. Add ?history=full for every row.
- Join on
- No company column.
- Commercial use
- Under each source’s own license.
Columns of track_record_candidates Column Meaning idtext · key SHA-256 (hex) of alert_id, kind and url: one row per alert, kind and URL. alert_idtext The alerts.id the candidate was found for. kindtext press, an article GDELT indexed, or newsroom, a post on the lab’s own newsroom feed. titletext The headline as GDELT or the feed gives it. GDELT spaces out punctuation (“GPT - 6 . 1”), and we keep that as read. snippettext · nullable The first 400 characters of a newsroom post’s description. Null for press, since GDELT returns no article text. outlettext The site’s domain, as GDELT names it or from the post’s link. urltext The article or post itself. published_atISO-8601 timestamp For press, when GDELT’s crawler first saw the article (not when the outlet published it). For a newsroom post, its own publication time. UTC. search_idtext The search that found it. Searches aren’t exported. The page shows each one’s outcome. found_atISO-8601 timestamp When the search that found it ran, in UTC. source_urltext · provenance The GDELT query URL, or the newsroom feed the post was read from. fetched_atISO-8601 timestamp · provenance When that query or feed was fetched, in UTC. - Grain
- One row per candidate the judge rated.
- Key
- id
- Updates
- When the judge runs.
- Time
- Event time none, knowledge time judged_at.
- as_of
- Rows with judged_at at or before as_of.
- History
- From the first rated candidate.
- Download
- Downloads the last 90 days by default, dated by judged_at, when the judge rated it. Add ?history=full for every row.
- Join on
- No company column.
- Commercial use
- Under each source’s own license.
Columns of track_record_verdicts Column Meaning idtext · key SHA-256 (hex) of candidate_id: one verdict per candidate. candidate_idtext The track_record_candidates.id rated. alert_idtext The alert the candidate was found for. same_eventboolean True when the judge read the headline (and snippet) as reporting the alert’s own event. A vague headline is rated false. rationaletext The judge’s reason, at most 400 characters, grounded against the headline and the alert’s change rows. judged_atISO-8601 timestamp When the judge run that wrote the verdict ran, in UTC. source_urltext · provenance The candidate’s own URL (the article or post rated). fetched_atISO-8601 timestamp · provenance When the candidate was fetched, in UTC. - Grain
- One row per recipe, key, and date.
- Key
- id
- Updates
- Every 6 hours, with the full check of every source.
- Time
- Event time date, knowledge time first_seen_at.
- as_of
- as_of answers 400 for this table. A recipe observation is rewritten in place when a re-read gives a different value, and the value it replaced is not kept.
- History
- Depends on the recipe. Some read a full history at their first run, others start at it.
- Download
- Downloads the last 90 days by default, dated by date, the date the value is for. Add ?history=full for every row.
- Join on
- company to entity_identifiers.entity_id.
- Commercial use
- It depends on the source. Of the sources it reads, 19 are ours to license, 19 pass on under upstream terms, and 14 aren’t in any paid offer. A paid license covers only what comes from sources that are ours.
Columns of recipe_observations Column Meaning idtext · key SHA-256 (hex) of recipe_id, key and date: one row per recipe, key and date. recipe_idtext The recipe that read the value (layers/terminal/server/theses/recipes/). companytext The company the recipe reads about: a lab id or a company id (cloudflare, coreweave, …). keytext What the number is of: a revenue tag, a department, a package, a GPU offer, an entry. datedate What the number is for: a quarter end, a day, an entry’s date, or the run’s UTC date for a source that reports a current state. valuenumber · nullable The number read. Null where the entry carries none.Unit: the recipe’s own (USD, USD per GPU-hour, a count, megawatts, …) payloadJSON JSON text (a string in the JSON export too): the fields kept beside the value, and all a judged rationale may cite. raw_keytext Key of the raw response the value was read from in this site’s object store (R2). first_seen_atISO-8601 timestamp When this recipe, key and date was first read, in UTC. source_urltext · provenance The URL the recipe fetched. fetched_atISO-8601 timestamp · provenance When the current value was read, in UTC. A re-read that finds the same value does not move it. - Grain
- One row per XBRL fact per filing.
- Key
- id
- Updates
- Every 30 minutes. Company facts every 6 hours.
- Time
- Event time end, knowledge time filed.
- as_of
- Rows whose filing date is before the UTC day of as_of. A fact counts from the day after its filing, whenever we read it, so this table answers as_of back to 2019.
- History
- Company facts as far back as the filer tagged them, and each 10-Q and 10-K instance from 2020.
- Download
- Downloads the last 90 days by default, dated by end, the period end. Add ?history=full for every row.
- Join on
- ticker to entity_identifiers.ticker, cik to entity_identifiers.cik.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of filed_facts Column Meaning idtext · key SHA-256 (hex) of ticker, concept, dims, start, end, and accession_no. tickertext The filer: MSFT, GOOGL, AMZN, META, or ORCL. ciktext The filer’s SEC CIK, ten digits, zero-padded. concepttext The XBRL concept with its prefix, e.g. us-gaap:PaymentsToAcquirePropertyPlantAndEquipment. dimstext The context’s dimensions as axis=member pairs, sorted and joined with “;”. A typed member’s value stands in for the member. Empty for a fact with no dimension. startdate · nullable The period’s first day. Null for a balance, which is at end. enddate The period’s last day, or the balance date. valuenumber The value as tagged, signed as the filer tagged it.Unit: the row’s unit column unittext USD, shares, pure (a ratio, 0.24 is 24%), or the measure as written. formtext The filing’s form: 10-Q, 10-K, or an amendment. fileddate The filing date EDGAR gives the accession. accession_notext The filing’s EDGAR accession number. basistext companyfacts (EDGAR’s company facts, every fact with no dimension) or instance (the filing’s own XBRL instance, for a fact with dimensions). raw_keytext Key of the document the fact was read from in this site’s object store (R2). first_seen_atISO-8601 timestamp When we first read the fact, in UTC. source_urltext · provenance The company facts document or the instance file the fact was read from. fetched_atISO-8601 timestamp · provenance When that read ran, in UTC. A filed fact is never rewritten. - Grain
- One row per series and period.
- Key
- series_id, end
- Updates
- Rebuilt from filed_facts on each request.
- Time
- Event time end, knowledge time filed.
- as_of
- Built from the filed_facts rows filed before the UTC day of as_of, so it answers back to 2019.
- History
- From 2020.
- Download
- Downloads the last 90 days by default, dated by end, the period end. Add ?history=full for every row.
- Join on
- ticker to entity_identifiers.ticker.
- Commercial use
- Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of exposure_quarters Column Meaning series_idtext · key The series, e.g. msft-capex or amzn-anthropic-equity-securities-without-readily-determinable-fair-value-upward-price-adjustment-annual-amount. tickertext The filer: MSFT, GOOGL, AMZN, META, or ORCL. filertext The filer’s name. Every value is the filer’s number, never a lab’s. grouptext capex, rpo (backlog), openai, or anthropic. labeltext What the series is, in plain words. concepttext The XBRL concept the series reads. dimstext The dimensions of the facts the series reads, as in filed_facts. Several are joined with “ | ” when the filer tagged the line on different axes over time. kindtext flow (a value per quarter) or balance (a value at each period end). unittext USD, shares, or pure (a ratio). startdate · nullable The quarter’s first day. Null for a balance. enddate · key The quarter’s last day, or the balance date. valuenumber The value for the quarter or at the date.Unit: the row’s unit column derivedboolean True when the quarter is a year-to-date figure less the one a quarter shorter, because the filing tags only year to date. less_startdate · nullable For a derived quarter, the start of the figure taken away. Null otherwise. less_enddate · nullable For a derived quarter, the end of the figure taken away. Null otherwise. less_valuenumber · nullable For a derived quarter, the figure taken away. Null otherwise.Unit: the row’s unit column less_accession_notext · nullable For a derived quarter, the filing the figure taken away came from. Null otherwise. accession_notext The filing the value is from: the newest that reported the period. formtext That filing’s form. fileddate That filing’s date. filing_urltext EDGAR’s index page for that filing. source_urltext · provenance The company facts document or the instance file the value was read from. fetched_atISO-8601 timestamp · provenance When that read ran, in UTC. - Grain
- One row per check of a source.
- Key
- id
- Updates
- Model catalogs up to every 5 minutes, SEC feeds every 30, everything else every 6 hours.
- Time
- Event time none, knowledge time started_at.
- as_of
- Rows with started_at at or before as_of.
- History
- From our first check of each source.
- Download
- Downloads the last 90 days by default, dated by started_at, when the check ran. Add ?history=full for every row.
- Join on
- No company column.
- Commercial use
- Yes. These are records of our own checks. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone.
Columns of source_runs Column Meaning idtext · key The run: <scope>:<source_id>:<started_at>. scopetext Which poll ran it: edgar, survey, careers (the large careers feeds, on a six-hourly tick of their own), or tripwire (an off-cycle poll of the model catalogs). source_idtext The source the row was read from, as sources.yaml names it. The Coverage panel lists each with its URL. started_atISO-8601 timestamp · provenance When the check started, in UTC. It stands in for fetched_at, since a failed run fetched nothing. statustext ok, unchanged, failed, baseline (a first fetch, nothing to compare), skipped (the source needs a credential this deploy lacks), or absent (a URL derived from a stored row returned 404). detailtext · nullable What happened, in words: the error, or a count such as “104 entities”. snapshot_idtext · nullable The snapshots.id the run fetched. Null when no fetch succeeded. addedinteger Rows the run logged as added.Unit: rows removedinteger Rows the run logged as removed.Unit: rows modifiedinteger Rows the run logged as modified.Unit: rows source_urltext · provenance The URL attempted. - Grain
- One row per tracked company and security that carries it (or none).
- Key
- entity, symbol
- Updates
- By hand, when a mapping changes.
- Time
- Event time none, knowledge time checked_on.
- as_of
- as_of answers 400 for this table. It’s a hand-checked table kept in code, and each row is dated by its checked_on.
- History
- The current mapping only.
- Download
- Downloads whole, since it’s a hand-checked lookup of labs to securities.
- Join on
- entity to entity_identifiers.entity_id, cik to entity_identifiers.cik, figi to your security master.
- Commercial use
- It depends on the source. Of the sources it reads, 1 is ours to license and 1 passes on under upstream terms (FIGI identifiers are free for any use, commercial or not). A paid license covers only what comes from sources that are ours. figi and mic come from OpenFIGI. Everything else comes from SEC filings.
Columns of entity_securities Column Meaning entitytext · key The lab or filer id (anthropic, microsoft, …), as the rest of the site uses it. entity_nametext The lab’s or filer’s name. entity_kindtext lab (one of the nine) or filer (a company whose filings the site reads). relationshiptext self (the entity is the issuer or part of it), parent (a public parent consolidates it), investor (the issuer discloses a stake in it), or none (no security carries it). issuertext · nullable The issuer as EDGAR lists it. Null when no security carries the entity. ciktext · nullable The issuer’s SEC CIK, ten digits. Null with no issuer. symboltext · nullable · key The symbol as EDGAR lists it, or the proposed one for a registered issuer. Null with no security. exchangetext · nullable The exchange as EDGAR lists it. Null where no submissions feed is read. listing_statustext listed (trading), registered (an S-1 on file, not yet trading), or private. notetext · nullable How the mapping was made and its limits. mictext · nullable The ISO 10383 market identifier code OpenFIGI lists the symbol under: XNGS (Nasdaq Global Select Market) or XNYS (New York Stock Exchange). Null with no security. figitext · nullable The symbol’s US composite FIGI, from OpenFIGI. entity_identifiers has the URL and time it was read. Null with no security. disclosed_intext · nullable For a parent or investor row, the URL of the filing that discloses the relationship. Null for self and none. source_urltext · provenance The document the row was checked against. checked_ondate · provenance The day the row was checked against source_url. It stands in for fetched_at, since the row is checked by hand. - Grain
- One row per company we name.
- Key
- entity_id
- Updates
- By hand, when a company’s identifiers change.
- Time
- Event time none, knowledge time fetched_at.
- as_of
- as_of answers 400 for this table. It’s a registry kept in code, and each identifier is dated by its own fetched_at.
- History
- The current registry only.
- Download
- Downloads whole, since it’s a lookup of one row per company.
- Join on
- cik to your security master, lei to your security master, figi to your security master, ticker to your security master.
- Commercial use
- It depends on the source. Of the sources it reads, 1 is ours to license, 2 pass on under upstream terms (CC0 1.0; FIGI identifiers are free for any use, commercial or not), and 1 isn’t in any paid offer. A paid license covers only what comes from sources that are ours. CIK, ticker, and exchange come from SEC, lei from GLEIF, and figi and mic from OpenFIGI. legal_name and country come from GLEIF too, except on a row with no LEI, where they come from the company’s own terms page.
Columns of entity_identifiers Column Meaning entity_idtext · key Our id for the company. It’s the value of provider, company, and entity_securities.entity everywhere else. entity_nametext The name the site uses. entity_kindtext lab (one of the nine), filer (a company whose SEC filings we read), or company (a comparison company in a thesis). legal_nametext · nullable The legal name as GLEIF records it, or as the company’s own terms page prints it when GLEIF has no record. Null where we read neither. countrytext · nullable ISO 3166-1 alpha-2 country of the legal entity: GLEIF’s legal-address country, else the country the company’s own page names. Null where we read neither. listing_statustext listed (its own shares trade), registered (an S-1 on file, not yet trading), subsidiary (owned by a listed parent, which entity_securities names), or private. ciktext · nullable The SEC CIK, ten digits, zero-padded. Null for a company that doesn’t file. cik_source_urltext · nullable · provenance Where the CIK was read: SEC’s company_tickers_exchange.json. cik_fetched_atISO-8601 timestamp · nullable · provenance When we read the CIK, in UTC. leitext · nullable The ISO 17442 Legal Entity Identifier, from GLEIF. Null with the reason in lei_note. lei_statustext · nullable GLEIF’s registration status for the LEI (ISSUED, LAPSED, …), as of lei_fetched_at. lei_notetext How the LEI was matched to the company, or why there’s none. lei_source_urltext · nullable · provenance The GLEIF request the LEI was read from. For a null LEI, the search that found none, where we ran one. lei_fetched_atISO-8601 timestamp · nullable · provenance When that GLEIF request ran, in UTC. tickertext · nullable The primary symbol as EDGAR lists it, or the proposed one for a registered company. entity_securities lists every symbol we map. Null when not listed. exchangetext · nullable The exchange as EDGAR’s ticker file lists it. Null when EDGAR gives none. mictext · nullable The ISO 10383 market identifier code OpenFIGI lists the symbol under (XNGS or XNYS). Null when not listed. figitext · nullable The symbol’s US composite FIGI, from OpenFIGI. Null when not listed. share_class_figitext · nullable The share-class FIGI OpenFIGI gives with it. Null when not listed. figi_source_urltext · nullable · provenance The OpenFIGI mapping API the FIGIs and MIC were read from. figi_fetched_atISO-8601 timestamp · nullable · provenance When that OpenFIGI request ran, in UTC. notetext · nullable Anything a join needs to know. source_urltext · nullable · provenance Where legal_name and country were read: GLEIF when there’s an LEI, else the company’s own terms page. fetched_atISO-8601 timestamp · nullable · provenance When source_url was read, in UTC.
Read from each source’s rights in sources.yaml. Coverage above has the terms we read each one under.
| Source | Commercial use |
|---|---|
| openai-models-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| openai-pricing-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| anthropic-models-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| anthropic-pricing-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| xai-models-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| google-pricing-htmlsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| google-models-mdsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| meta-models-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| meta-muse-wonder-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| meta-muse-spark-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| meta-pricing-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| mistral-models-mdsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| mistral-pricing-mdsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| deepseek-pricing-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| alibaba-pricing-htmlsources | No. It stays on the free site and isn’t in any paid offer. |
| alibaba-models-htmlsources | No. It stays on the free site and isn’t in any paid offer. |
| moonshot-models-mdsources | No. It stays on the free site and isn’t in any paid offer. |
| openrouter-modelssources | No. It stays on the free site and isn’t in any paid offer. |
| openrouter-rankings-dailysources | Under its own license: CC BY 4.0 (openrouter.ai/docs/cookbook/administration/data-api, read 2026-09-08). |
| openai-ashbysources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| anthropic-greenhousesources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| anthropic-greenhouse-departmentssources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| xai-greenhousesources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| xai-greenhouse-departmentssources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| mistral-ashbysources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| google-careerssources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-ftssources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-fts-openaisources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-spcxsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-msftsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-amznsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-nvdasources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-googlsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-metasources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-orclsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-submissions-babasources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| edgar-companyfacts-spcxsources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| openai-statussources | No. It stays on the free site and isn’t in any paid offer. |
| anthropic-statussources | No. It stays on the free site and isn’t in any paid offer. |
| google-cloud-statussources | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| mistral-statussources | No. It stays on the free site and isn’t in any paid offer. |
| deepseek-statussources | No. It stays on the free site and isn’t in any paid offer. |
| deepseek-status-atomsources | No. It stays on the free site and isn’t in any paid offer. |
| xai-statussources | No. It stays on the free site and isn’t in any paid offer. |
| openai-misalignment-reportssources | No. It stays on the free site and isn’t in any paid offer. |
| sec-revenue-netrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| sec-revenue-akamrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| sec-revenue-fslyrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| npm-wranglerrecipes | Under its own license, which we pass on. |
| greenhouse-cloudflarerecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| cloudflare-changelog-airecipes | No. It stays on the free site and isn’t in any paid offer. |
| gpu-lambdarecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-coreweaverecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-nebiusrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-crusoerecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-togetherrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-digitaloceanrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-verdarecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-azurerecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gpu-oraclerecipes | No. It stays on the free site and isn’t in any paid offer. |
| sec-revenue-crwvrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| ramp-ai-indexrecipes | No. It stays on the free site and isn’t in any paid offer. |
| npm-openairecipes | Under its own license, which we pass on. |
| npm-anthropic-sdkrecipes | Under its own license, which we pass on. |
| npm-google-genairecipes | Under its own license, which we pass on. |
| npm-mistralrecipes | Under its own license, which we pass on. |
| npm-claude-coderecipes | Under its own license, which we pass on. |
| npm-codexrecipes | Under its own license, which we pass on. |
| npm-gemini-clirecipes | Under its own license, which we pass on. |
| npm-claude-agent-sdkrecipes | Under its own license, which we pass on. |
| npm-openai-agentsrecipes | Under its own license, which we pass on. |
| pypi-openairecipes | Under its own license, which we pass on. |
| pypi-anthropicrecipes | Under its own license, which we pass on. |
| pypi-google-genairecipes | Under its own license, which we pass on. |
| pypi-mistralairecipes | Under its own license, which we pass on. |
| pypi-xai-sdkrecipes | Under its own license, which we pass on. |
| pypi-claude-agent-sdkrecipes | Under its own license, which we pass on. |
| pypi-openai-agentsrecipes | Under its own license, which we pass on. |
| github-prs-claude-coderecipes | No. It stays on the free site and isn’t in any paid offer. |
| github-prs-codexrecipes | No. It stays on the free site and isn’t in any paid offer. |
| github-prs-julesrecipes | No. It stays on the free site and isn’t in any paid offer. |
| epoch-data-centersrecipes | Under its own license, which we pass on. |
| epoch-data-center-timelinesrecipes | Under its own license, which we pass on. |
| sec-msft-openairecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| sec-amzn-anthropicrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| limits-openai-gpt-6-astrarecipes | No. It stays on the free site and isn’t in any paid offer. |
| limits-openai-gpt-5-6-terrarecipes | No. It stays on the free site and isn’t in any paid offer. |
| limits-openai-gpt-5-6-lunarecipes | No. It stays on the free site and isn’t in any paid offer. |
| limits-anthropicrecipes | No. It stays on the free site and isn’t in any paid offer. |
| limits-xairecipes | No. It stays on the free site and isn’t in any paid offer. |
| limits-metarecipes | No. It stays on the free site and isn’t in any paid offer. |
| pay-openairecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| pay-anthropicrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| newsroom-openairecipes | No. It stays on the free site and isn’t in any paid offer. |
| newsroom-google-deepmindrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| newsroom-metarecipes | No. It stays on the free site and isn’t in any paid offer. |
| newsroom-mistralrecipes | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gdelt-doctrack record | Under its own license, which we pass on. |
| wayback-pricingarchive | No. It stays on the free site and isn’t in any paid offer. |
| wayback-hiringarchive | No. It stays on the free site and isn’t in any paid offer. |
| filed-facts-msftfiled facts | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| filed-facts-googlfiled facts | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| filed-facts-amznfiled facts | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| filed-facts-metafiled facts | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| filed-facts-orclfiled facts | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| sec-identifiersidentifiers | Yes. A paid license covers the full history. The last 90 days are CC BY 4.0 for anyone. |
| gleif-leiidentifiers | Under its own license: CC0 1.0 (gleif.org/en/meta/lei-data-terms-of-use, read 2026-11-05). |
| openfigi-mappingidentifiers | Under its own license: FIGI identifiers are free for any use, commercial or not (openfigi.com/docs/terms-of-service, read 2026-11-05). |
| lab-legal-pagesidentifiers | No. It stays on the free site and isn’t in any paid offer. |
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.csvSwap 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.
| Lab | History from | Internet Archive copies read · skipped | We check it since | Gaps before that |
|---|---|---|---|---|
| OpenAI | 2023-03-07 – 2026-08-06 · 107 read · 3 skipped |
| ||
| Anthropic | 2024-03-04 – 2026-06-11 · 82 read · 10 skipped |
| ||
| 2024-06-15 – 2026-08-23 · 98 read · 18 skipped |
| |||
| xAI | 2025-03-20 – 2026-08-23 · 18 read · 23 skipped |
| ||
| Meta | Meta had no API price list of its own before the page we check now. | — | ||
| Mistral | 2024-02-26 – 2025-02-03 · 33 read · 5 skipped |
|
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.
| Lab | History from | Internet Archive copies read · skipped | We check it since | Gaps before that |
|---|---|---|---|---|
| OpenAI | 2023-01-08 – 2026-08-19 · 53 read · 0 skipped |
| ||
| Anthropic | 2023-01-18 – 2026-08-17 · 128 read · 0 skipped |
| ||
| 2023-01-27 – 2026-01-23 · 79 read · 0 skipped |
| |||
| xAI | 2023-11-05 – 2026-08-21 · 92 read · 1 skipped |
| ||
| Meta | no history yet | Meta 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. | — | — |
| Mistral | 2023-09-27 – 2026-10-21 · 64 read · 0 skipped |
|
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 usFor 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 keyHow 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
| Caller | /api routes and bulk files | /export tables | Saved pages |
|---|---|---|---|
| No key, per IP address | 60 a minute | 30 a minute | None |
| Research key | 600 a minute | 60 a minute | None |
| Systematic key | 1,200 a minute | 60 a minute | 600 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.
Webhooks
Ask for a webhook 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.
- 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.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.
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.
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.
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.
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.
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.
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 .
| Source | Checked every | 30 days Good checks | 90 days Good checks | Longest wait for a good check |
|---|---|---|---|---|
| OpenAI pricing.mdOpenAI · pricing-catalog | 30 min | 61.3% 1,629 of 2,654 | 74.9% 3,070 of 4,095 | 12.2 days to |
| Mistral status page incidentsMistral · status | 6 h | 78.9% 15 of 19 | 78.9% 15 of 19 | 24 h to |
| OpenAI misalignment reports and noticesOpenAI · disclosures | 6 h | 99.1% 115 of 116 | 88.1% 142 of 161 | 3.5 days to |
| EDGAR full-text search for S-1s (“OpenAI”)market-wide · sec | 30 min | 89.9% 1,259 of 1,400 | 93.6% 2,065 of 2,206 | 2.6 days to |
| S-1 statement of operations (2 sources)market-wide · sec | 6 h | 94.4% 34 of 36 | 94.4% 34 of 36 | 12 h to |
| EDGAR filing index (2 sources)market-wide · sec | 6 h | 94.5% 35 of 37 | 94.5% 35 of 37 | 12 h to |
| EDGAR XBRL segment facts (4 sources)market-wide · sec | 6 h | 95% 76 of 80 | 95% 76 of 80 | 12 h to |
| Google model page (34 sources)Google · pricing-catalog | 6 h | 95.7% 546 of 570 | 95.7% 546 of 570 | 3 days to |
| Anthropic Greenhouse jobsAnthropic · hiring | 6 h | 98.2% 114 of 116 | 98.3% 233 of 237 | 18 h to |
| Anthropic models overview.mdAnthropic · pricing-catalog | 30 min | 99.8% 2,650 of 2,654 | 98.4% 4,085 of 4,149 | 30.4 h to |
| Meta models.mdMeta · pricing-catalog | 30 min | 98.9% 2,264 of 2,289 | 98.9% 2,264 of 2,289 | 6.4 h to |
| EDGAR submissions (BABA, Qwen’s parent)market-wide · sec | 30 min | 99% 106 of 107 | 99% 106 of 107 | 60 min to |
| EDGAR submissions (ORCL)market-wide · sec | 30 min | 99.1% 114 of 115 | 99.1% 114 of 115 | 60 min to |
| Google Gemini API models.mdGoogle · pricing-catalog | 30 min | 99.2% 507 of 511 | 99.2% 507 of 511 | 75 min to |
| Google Gemini API pricingGoogle · pricing-catalog | 30 min | 99.6% 2,644 of 2,654 | 99.5% 4,129 of 4,149 | 18 h to |
| Anthropic (Claude) status page incidentsAnthropic · status | 6 h | 99.1% 115 of 116 | 99.5% 234 of 235 | 12 h to |
| Google Cloud status incidents (Gemini / Vertex AI only)Google · status | 6 h | 99.1% 115 of 116 | 99.5% 234 of 235 | 12 h to |
| OpenAI status page incidentsOpenAI · status | 6 h | 99.1% 115 of 116 | 99.5% 234 of 235 | 12 h to |
| Anthropic Greenhouse departmentsAnthropic · hiring | 6 h | 99.1% 115 of 116 | 99.5% 236 of 237 | 18 h to |
| OpenAI Ashby job boardOpenAI · hiring | 6 h | 99.1% 115 of 116 | 99.5% 236 of 237 | 18 h to |
| xAI Greenhouse jobsxAI · hiring | 6 h | 99.1% 115 of 116 | 99.5% 236 of 237 | 18 h to |
| xAI Greenhouse departmentsxAI · hiring | 6 h | 99.1% 115 of 116 | 99.5% 236 of 237 | 18 h to |
| OpenAI model page (41 sources)OpenAI · pricing-catalog | 6 h | 99.5% 4,401 of 4,420 | 99.6% 7,003 of 7,027 | 12 h to |
| EDGAR XBRL company facts (anthropic, resolved filer)Anthropic · revenue | 30 min | 99.8% 555 of 556 | 99.8% 555 of 556 | 60 min to |
| EDGAR submissions (anthropic, resolved filer)Anthropic · sec | 30 min | 99.8% 555 of 556 | 99.8% 555 of 556 | 60 min to |
| EDGAR full-text search for S-1s (“Anthropic”)market-wide · sec | 30 min | 99.6% 1,395 of 1,400 | 99.8% 2,880 of 2,885 | 3 h to |
| EDGAR submissions (META)market-wide · sec | 30 min | 99.8% 1,217 of 1,219 | 99.8% 1,217 of 1,219 | 60 min to |
| OpenAI models.mdOpenAI · pricing-catalog | 30 min | 99.8% 2,650 of 2,655 | 99.8% 4,145 of 4,150 | 18 h to |
| Anthropic pricing.mdAnthropic · pricing-catalog | 30 min | 99.8% 2,650 of 2,654 | 99.9% 4,145 of 4,149 | 18 h to |
| EDGAR XBRL company facts (SPCX, xAI’s parent)market-wide · revenue | 30 min | 99.8% 1,398 of 1,400 | 99.9% 2,206 of 2,208 | 60 min to |
| EDGAR submissions (AMZN)market-wide · sec | 30 min | 99.8% 1,398 of 1,400 | 99.9% 2,206 of 2,208 | 60 min to |
| EDGAR submissions (GOOGL)market-wide · sec | 30 min | 99.8% 1,398 of 1,400 | 99.9% 2,206 of 2,208 | 60 min to |
| EDGAR submissions (MSFT)market-wide · sec | 30 min | 99.8% 1,398 of 1,400 | 99.9% 2,206 of 2,208 | 60 min to |
| EDGAR submissions (NVDA)market-wide · sec | 30 min | 99.8% 1,398 of 1,400 | 99.9% 2,206 of 2,208 | 60 min to |
| EDGAR submissions (SPCX, xAI’s parent)market-wide · sec | 30 min | 99.8% 1,398 of 1,400 | 99.9% 2,883 of 2,885 | 3 h to |
| xAI models.mdxAI · pricing-catalog | 30 min | 99.9% 2,652 of 2,654 | 99.9% 4,147 of 4,149 | 18 h to |
| OpenRouter /api/v1/modelsmarket-wide · pricing-cross-check | 6 h | 100% 116 of 116 | 100% 237 of 237 | 18 h to |
| Mistral Ashby job boardMistral · hiring | 6 h | 100% 19 of 19 | 100% 19 of 19 | 12 h to |
| OpenAI misalignment report page (23 sources)OpenAI · disclosures | 6 h | 100% 2,143 of 2,143 | 100% 2,605 of 2,605 | 12 h to |
| OpenRouter usage rankings (daily)market-wide · demand-share | 6 h | 100% 116 of 116 | 100% 234 of 234 | 12 h to |
| Google careers feed (DeepMind roles only)Google · hiring | 6 h | 100% 9 of 9 | 100% 9 of 9 | 6 h to |
| DeepSeek status page incident history (RSS)DeepSeek · status | 6 h | 100% 9 of 9 | 100% 9 of 9 | 6 h to |
| DeepSeek status page incident history (Atom, for end times)DeepSeek · status | 6 h | 100% 9 of 9 | 100% 9 of 9 | 6 h to |
| xAI status page incident history (RSS)xAI · status | 6 h | 100% 9 of 9 | 100% 9 of 9 | 6 h to |
| Meta pricing and rate limits.mdMeta · pricing-catalog | 30 min | 100% 2,289 of 2,289 | 100% 2,289 of 2,289 | 30 min to |
| Mistral models.mdMistral · pricing-catalog | 30 min | 100% 510 of 510 | 100% 510 of 510 | 30 min to |
| Mistral API pricing.mdMistral · pricing-catalog | 30 min | 100% 510 of 510 | 100% 510 of 510 | 30 min to |
| Alibaba Cloud Model Studio recommended modelsAlibaba · pricing-catalog | 30 min | 100% 240 of 240 | 100% 240 of 240 | 25 min to |
| Alibaba Cloud Model Studio pricing (Singapore, international)Alibaba · pricing-catalog | 30 min | 100% 240 of 240 | 100% 240 of 240 | 25 min to |
| DeepSeek models and pricing.mdDeepSeek · pricing-catalog | 30 min | 100% 240 of 240 | 100% 240 of 240 | 25 min to |
| Meta Muse Spark.md (availability)Meta · pricing-catalog | 6 h | 100% 28 of 28 | 100% 28 of 28 | 25 min to |
| Meta Muse Wonder.md (availability)Meta · pricing-catalog | 6 h | 100% 28 of 28 | 100% 28 of 28 | 25 min to |
| Moonshot AI (Kimi) model list.mdMoonshot AI · pricing-catalog | 30 min | 100% 240 of 240 | 100% 240 of 240 | 25 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.
| Filing | EDGAR accepted | We alerted | From acceptance | From release |
|---|---|---|---|---|
| S-1/A filed by Anthropic, PBC (2026-11-02)0001628280-26-068676 · s1-floor | 6 min | 6 min | ||
| 10-Q filed by AMAZON COM INC (2026-10-30)0001018724-26-000040 · periodic-floor | public | 12.2 h | 31 min | |
| 10-Q filed by Alphabet Inc. (2026-10-29)0001652044-26-000084 · periodic-floor | public | 10 h | 31 min | |
| 10-Q filed by MICROSOFT CORP (2026-10-28)0001193125-26-436133 · periodic-floor | 24 min | 24 min | ||
| Anthropic, PBC filed S-1 (2026-10-26) — CIK 0002130357 resolved for anthropic0001628280-26-067168 · cik-resolved | 31 min | 31 min | ||
| 10-Q filed by SPACE EXPLORATION TECHNOLOGIES CORP (2026-10-22)0001628280-26-066880 · periodic-floor | 28 min | 28 min | ||
| 10-Q filed by Meta Platforms, Inc. (2026-10-22)0001628280-26-066773 · periodic-floor | public | 10.5 h | 31 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.
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.
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.