About
Tracking the frontier AI labs — API prices, hiring, filings, revenue, incidents, demand share. Every number carries its source URL and fetch timestamp.
What this is
A free, public, read-only terminal for an equity analyst covering the AI-infrastructure complex into the frontier-lab IPO wave. It watches the four frontier model providers — OpenAI, Anthropic, Google, xAI — on six axes: the API price list, the hiring board (with the physical-infrastructure buildout read off it), demand share on OpenRouter and the spend share it implies at list price, status-page incidents, SEC filings, and disclosed revenue. The private-company signals carry the weight before any lab trades; EDGAR is the tripwire for the moment one does, and the revenue panel is wired to fill the day it happens — until then it says “no audited disclosure” rather than printing a run-rate.
Every source is polled on a schedule, snapshotted whole, parsed deterministically, and diffed against its previous state. What you read here is the current state plus the change log; an alert is a claim about change rows and nothing else.
The provenance rule
No number without a source URL and a fetch timestamp. Every figure on every page links to the exact URL it was read from and carries the UTC instant it was fetched. A datum you cannot re-fetch is a claim, not data, and the store refuses to hold one.
Where a source does not publish a figure, the terminal says so instead of guessing: OpenAI’s catalog page prints no prices, Google has no public hiring feed, OpenRouter’s price list is a third-party restatement held out as a cross-check, and its usage rankings are one aggregator’s traffic, never market share. Timestamps read relative inside a day; the exact value is one hover away and in the page markup.
Caveats
In the audit’s own words, read from the source registry at request time.
- OpenAI models.md
Catalog only — the page prints no prices; they come from openai-pricing-md. The marketing page (openai.com/api/pricing) is Cloudflare-403'd to any headless client and must never be a dependency.
- OpenAI pricing.md
Did not exist at the 2026-08-25 audit; live-checked 2026-09-22 as real markdown (text/markdown, ETag, Last-Modified) at the docs origin, not the 403'd marketing page. One row per model, service tier and context band; the Standard short-context row shares its key with the catalog row from openai-models-md. The "(<272K context length)" annotation is the short-context bound and is kept in notes, never read as a context window. Cache-write prices, the cyber / multimodal / realtime "Grouped Pricing Table" sections and per-minute or per-image tables are not $/MTok token pricing and are not parsed. Promotional windows are prose on this page ("promotional pricing is available at least through …") with no hard end date, so no effective_until is set — the price shown is the price printed.
- Anthropic models overview.md
Catalog fields (context window, cutoff); pair with anthropic-pricing-md for prices.
- Anthropic pricing.md
Audit recorded this page as semantic HTML; scaffold-time fetch (2026-08-25) confirmed the .md suffix serves real markdown here too.
- xAI models.md
Long-context dual pricing: models listed with two rows (< 200k / >= 200k prompt tokens). The marketing page (x.ai/api) is Cloudflare-403'd and must never be a dependency.
- Google Gemini API pricing
Model names live in headings above table clusters; prices carry dual-date promo strings ("$0.75 through Dec 31, 2026. $1.50 starting Jan 1, 2027."). The .md trick returns a JS shell and the models page is client-rendered — only this pricing page is genuine SSR.
- OpenRouter /api/v1/models
Third-party restatement with no drift SLA and thin xAI coverage (6 vs 20+ SKUs) — cross-check, never source of record.
- OpenRouter usage rankings (daily)
OpenRouter share, not market share — one aggregator's traffic. Direct API and enterprise volume never route through OpenRouter, so a lab's share here measures its standing among developers who use an aggregator, not its revenue. Fetched without date parameters: the endpoint's default window is the trailing 30 completed UTC days, so every 6-hourly survey tick re-reads the same days and a late revision lands as a modified row. Rate limits 30 req/min per key, 500/day per account; this terminal uses four a day.
- OpenAI Ashby job board
757 roles at audit time.
- Anthropic Greenhouse jobs
537 roles at audit time. Department requires the /departments join — the jobs endpoint carries no department field.
- xAI Greenhouse jobs
262 roles at audit time; 255 at the 2026-08-25T23:08Z join re-fetch. Every row carries company_name "SpaceXAI" — the board is an entity-blended SpaceX/xAI artifact of the 2025 merger, and presenting it as pure xAI hiring would mislead. Caveat must ship visibly wherever this data surfaces. What the /departments join adds is bounded evidence, not a fix: the 26 departments are xAI-shaped (Data Center 121, Human Data 36, Engineering 23) with no aerospace or launch function, and 2 of 255 titles name a SpaceX-side program (Starlink, battery storage). Department requires the join — the jobs endpoint carries no department field.
- xAI Greenhouse departments (join)
Departments are the board owner's own labels, not an independent entity split: they narrow how much SpaceX could be hiding in the blend, they do not prove none is.
- EDGAR full-text search (S-1 tripwire, “Anthropic”)
UA header required (contact email form), 10 req/s. Open keyword sweeps across all filers are confirmed noisy (micro-cap false positives) — whitelist only. Confidential DRS filings are structurally invisible until flipped public; we catch the public-flip moment and say so.
- EDGAR full-text search (S-1 tripwire, “OpenAI”)
The OpenAI side of the S-1 tripwire, same UA + rate rules and the same noise as edgar-fts: an S-1 that mentions OpenAI in its text is a hit, so display_names (the filer) is what the resolver matches, never the query term. The endpoint caps a response at 100 hits.
- EDGAR submissions (SPCX — xAI’s parent)
Same UA + rate rules as edgar-fts. The parser keeps only the tracked forms (S-1, 424B4, 10-Q, 10-K, 8-K and their amendments — server/pipeline/parsers/sec/forms.ts); Form 4, 144, 3, 13G and D rows are dropped at parse so insider trades and notices never reach the judge as "an SEC change". SPCX is xAI's parent since the 2025 merger: its periodic filings are where any xAI segment disclosure would land.
- EDGAR submissions (MSFT)
Whitelisted CIK, same form filter as edgar-submissions. Microsoft's 10-Q/10-K carry the OpenAI equity-method and commitment disclosures; the terminal alerts on the filing, it does not extract the figure.
- EDGAR submissions (AMZN)
Whitelisted CIK, same form filter as edgar-submissions. Amazon's 10-Q/10-K carry the Anthropic convertible-note and investment disclosures; the terminal alerts on the filing, it does not extract the figure.
- EDGAR submissions (NVDA)
Whitelisted CIK, same form filter as edgar-submissions.
- EDGAR submissions (GOOGL)
Whitelisted CIK, same form filter as edgar-submissions. Alphabet is Google's parent; its filings segment Google Cloud, never Gemini, so nothing here is a lab revenue figure (see revenue_filers).
- EDGAR XBRL company facts (SPCX — xAI’s parent)
SpaceX consolidated revenue, not xAI's: SpaceX is xAI's parent since the 2025 merger and files as one registrant. Company facts carry non-dimensional XBRL facts only — no segment members — so whether SpaceX segments xAI in its 10-Q cannot be read here and is unverified. Read as the parent's audited top line, the ceiling any xAI figure sits under, never as a lab revenue number. Revenue tags are read in a fixed order (Revenues, RevenueFromContractWithCustomerExcludingAssessedTax, SalesRevenueNet) and every tag present is stored with its name; the reader picks per period. Same UA + rate rules as edgar-fts.
- OpenAI status page incidents
Capacity-strain proxy, not an SLA: a status page records what the vendor chose to post. Live-fetched 2026-09-08: 25 incidents (2026-08-05 to 2026-09-08), so the feed itself covers roughly one month and older history is only what this pipeline accumulates (append-only lane — an incident scrolling out of the feed is kept). No components on this page; the incident URL is composed from the feed's own page.url + /incidents/{id} (verified to resolve), not read from a field.
- Anthropic (Claude) status page incidents
Registered at the final URL: status.anthropic.com 301-redirects to status.claude.com. Live-fetched 2026-09-08: exactly 50 incidents (2026-07-21 to 2026-09-03), which is the page's window cap — counts before that date are partial until the pipeline has polled through it. Components name the surface (Claude API, claude.ai, Claude Code, Claude Cowork, Console); consumer-app incidents count alongside API ones, so read the component list, not just the count. Incident URL composed as page.url + /incidents/{id} (verified to resolve).
- Google Cloud status incidents (Gemini / Vertex AI only)
This is the Alphabet-wide Cloud feed; an unfiltered count would conflate Compute/BigQuery/Spanner outages with Gemini and mislead — the same reasoning that cuts Google hiring. The parser keeps ONLY incidents whose affected_products[].title contains "Gemini" (case-insensitive) or equals "Vertex AI"; everything else is dropped and counted in the run note. Live-fetched 2026-09-08: 6 incidents across 40 product titles, 1 kept ("Vertex Gemini API", 2026-02-27). Severity vocabulary is Google's (low/medium/high), not Statuspage's (minor/major/critical); status is the most recent update's status (AVAILABLE once resolved). Incident URL composed as status.cloud.google.com/ + uri (verified to resolve).
- google-hiring
cut — display "no public feed" honestly. None usable: careers.google.com is an auth-walled SPA; the DeepMind Greenhouse board is vestigial (10 jobs). Alphabet-wide numbers would conflate Search/Ads/Cloud with Gemini and mislead.
- artificial-analysis
cut — external link only, never ingested. artificialanalysis.ai/data-api (read 2026-09-08) states the free API tier is "Internal use only; no redistribution." and that redistribution rights come only with a commercial package ("Commercial redistribution with attribution"). A public terminal republishes by definition, so the site is linked as a reference beside the demand-share panel and no figure from it is stored or shown.
- lmarena
cut — external link only, never ingested. arena.ai (formerly lmarena.ai; read 2026-09-08) publishes a leaderboard app with no documented data endpoint, dataset download, or data license. Scraping a page with no stated license would be a claim about that page, not data; it is linked as a reference beside the demand-share panel.
- compute-deals
stretch goal only (new-post tier, no extraction claims). RSS detection solvable for 4 sources (Anthropic = SPA no feed; xAI = hard 403), but the deals that matter break in the press before any company feed — honest coverage is impossible, so extraction is cut.
- xai-status
cut — display "no public feed" honestly. status.x.ai/api/v2/incidents.json answers 403 (Cloudflare challenge page) to any non-browser client, live-checked 2026-09-08 with a descriptive User-Agent. Scraping a rendered page would be a dependency on a bot wall; the terminal shows the gap instead.
- mistral
cut — not tracked on any axis. No supported surface on either primary axis, live-checked 2026-09-08. Hiring: api.ashbyhq.com/posting-api/job-board/mistral answers 404 (the board at jobs.ashbyhq.com/mistral is a 7 KB HTML shell over an internal GraphQL endpoint, not the posting API). Pricing: mistral.ai/pricing is a 485 KB client-side HTML app (same bytes at docs.mistral.ai/deployment/laplateforme/pricing) with no markdown or JSON endpoint; docs.mistral.ai/llms.txt lists a Pricing and a Models Overview .md page, but both links answer 404 with a 462 KB HTML shell. An HTML parse in the Google style is conceivable; with no hiring feed to pair it with, a fifth lab on one axis is not worth the parser.
Data latency
- SEC filings
- The EDGAR feeds — the S-1 full-text tripwire, one submissions feed per whitelisted CIK, and XBRL company facts for each tagged revenue filer — are polled every 30 minutes: the one axis where latency is worth polling for.
- Pricing and hiring
- Every source, EDGAR included, is surveyed every 6 hours. The overlap is deliberate: a stalled tripwire goes covered, not blind.
- Pages
- Each payload is cached for five minutes, keyed by the newest poll tick, so a poll invalidates the cache by construction. The tick a page reflects is printed on it.
- Confidential filings
- A confidential draft registration is structurally invisible on EDGAR until it flips public. The terminal catches the flip and says so; it cannot see the draft.
Not investment advice
This is a data terminal, not a recommendation. It reports what public sources say and when they said it. Nothing here is personalised, nothing here is a solicitation, and the judged alerts are a model’s reading of change rows, labelled as such.
Code and data
- Source on GitHub — MIT licensed; the source registry and every parser are in the repo.
- Bulk exports — every table as CSV or JSON.
- Atom feed — alerts, for a reader that wants to be told.
Connect an agent
The same queries the pages run, as MCP tools. Read-only, no account, no key.
Point Claude, ChatGPT or any MCP client at the endpoint below. Each tool returns the matching API payload with its provenance intact, through the same cache and the same per-address rate limit as the site.
https://frontierterm.com/mcpclaude mcp add --transport http frontier-terminal https://frontierterm.com/mcpTools: describe, get_overview, get_prices, get_price_history, get_hiring, get_hiring_history, get_releases, get_incidents, get_rankings, get_alerts, get_alert, get_coverage, get_status. Start with describe.