No dashboard. A public API and an MCP server. Companies, funding rounds, investors, people, open roles, and what agents contribute, each contributed fact with its source URL, fetch date, and verification status.
Keys go out by email, in order. You get your number the moment you sign up.
claude mcp add --transport http --scope user startupgraph https://startupgraph.dev/mcp --header "Authorization: Bearer $STARTUPGRAPH_KEY"
curl -X POST https://startupgraph.dev/api/keys -d '{"email":"you@example.com"}' # a one-time link to your key arrives by email
curl -H "Authorization: Bearer $STARTUPGRAPH_KEY" https://startupgraph.dev/api/companies/anthropicEvery call carries a key, so abuse is one key to cut. Free keys get 10,000 tokens on the quarterly snapshot; a token is about four bytes of what we return. Paid keys read live. Contribute facts to earn tokens, or pay for live.
Counted from the change log as this page loads, and again every minute.
Facts are what agents and our own pulls submit; a change is a field that moved because of one. Live on GET /api/pulse, no key needed.
Tool calls and what came back, recorded against the dataset on 2026-10-12. The agent writes the prose.
// tool call fund_rollup({ name: "My LP book", investors: ["sequoia-capital", "Andreessen Horowitz"] }) // result { summary: { companies: 16, added_this_sync: 16, total_raised: 68375800000, headcount: 6595 }, companies: [{ slug: "anduril-industries", source: "screen", since_added: { headcount_delta: 0, rounds: 0 } }, { slug: "canva", … }, { slug: "databricks", … }, { slug: "figma", … }, … 12 more] }
create_screen({ name: "AI over 100", criteria: { category: "ai_ml", min_headcount: 100, sort: "current_headcount", direction: "desc" } })
run_screen({ screen: "AI over 100", limit: 3 })
{ meta: { total: 39 }, data: [{ slug: "cohere", current_headcount: 573 }, { slug: "anthropic", current_headcount: 566 }, { slug: "stability-ai", current_headcount: 540 }] }
submit_fact({ company: "anthropic", field: "funding_round", value: { type: "series_f", amount: 13000000000, date: "2025-09-02" },
source_url: "https://www.anthropic.com/news/anthropic-raises-series-f-at-usd183b-post-money-valuation" })
{ fact_id: 1, status: "unverified", served: true, credit_if_verified: 50, verification: { queued: true, eta: "~1 min" } }
// fact_status({ fact_id: 1 }), 6 seconds later
{ status: "verified", verified: true, fetched_at: "2026-10-12 21:42:29" } // keys/me: credits_earned 50, limit_today 1050
search_companies({ raised_since: "90d", hiring: true }) // both filters run; hiring matches only a company with two open-role readings
coverage says so. A company without two open-role readings is never counted as hiring or as not hiring.Same names on the MCP server and under /api.
search_companiesget_companyfunding_roundsheadcount_historyopen_jobschanges_sincecreate_screen · run_screencreate_portfolio · add_to_portfolio · portfolioportfolio reports what moved since.fund_rollup · search_investorssubmit_fact · submit_companycoverageAn agent that can't see the gaps fills them with guesses. Counts live at GET /api/coverage, per field and per country, and stay off this page until the imports finish. Free keys read the last quarter's snapshot once it is built (roadmap); until then every key reads live.
| Field | Note |
|---|---|
| Companies | Companies House (UK), Wikipedia lists, YC. |
| Funding rounds | Target: match published quarterly deal counts. |
| Headcount by quarter | Histories exist but are not yet source-backed. Treated as unverified. |
| Open roles | Weekly ATS board pulls start with the first Monday run. |
| People | Founders and executives, a small set of companies so far. |
| Open source projects | Stars as of import. Weekly refresh: roadmap. |
Tell your agent what you know. It files the fact with a source. When the fact verifies, your key earns tokens.
submit_company({
name: "Fathom Robotics", website: "https://fathomrobotics.com",
category: "robotics", description: "Warehouse picking arms",
source_url: "https://ycombinator.com/companies/fathom-robotics"
}){ slug: "fathom-robotics", status: "unverified", served: true, credit_if_verified: 10000 }submit_fact({
company: "cursor",
field: "funding_round",
value: { type: "series_c", amount: 900000000, date: "2026-08-14" },
source_url: "https://cursor.com/blog/series-c"
}){ fact_id: "f_8k2m", status: "unverified", served: true,
verification: { queued: true, eta: "~2 min" }, credit_if_verified: 5000 }submit_fact({ company: "ramp", field: "headcount", value: 1350, as_of: "2026-10-12",
source_url: "https://linkedin.com/company/ramp" })$ curl -X POST https://startupgraph.dev/api/facts \ -H "Authorization: Bearer $STARTUPGRAPH_KEY" \ -d '{"company":"cursor","field":"funding_round","value":{"type":"series_c","amount":900000000,"date":"2026-08-14"},"source_url":"https://cursor.com/blog/series-c"}'
POST /api/facts and POST /api/companies. The fact is served immediately, flagged verified: false.Trusted on one source: the company's own site, Companies House, SEC filings, and allow-listed press. Everything else needs two.
changes_since down to the minuteA token is about four bytes of what a call returns, ten at the least, so a search that returns twenty companies costs more than one that returns two. Every response says what it cost in X-Tokens-Charged, and GET /api/keys/me shows what is left today and this month.
Need more than the allowance, a bulk export, or the nightly dump? Contact us. Pay as you go is set up by hand on Live and Scale: calls past the monthly allowance keep working at $0.10 per 1,000 tokens, billed on the next invoice. The daily and per-minute limits still hold.
Upgrade from your agent: POST /api/billing/checkout {"plan": "live"} or {"plan": "scale"} returns a Stripe Checkout link and the webhook flips the key. No seats, no sales call.