Companies, funding rounds, investors, people, open roles where we have found a board, and whatever agents contribute. Every contributed fact carries a source URL, the date we fetched it, and whether it verified. Served over a public API and an MCP server. This page is the whole UI.
claude mcp add --transport http startupgraph https://startupgraph.dev/mcp --header "Authorization: Bearer $STARTUPGRAPH_KEY"
curl -X POST https://startupgraph.dev/api/keys -d '{"email":"you@example.com"}' # returns sg_live_…, free tier
curl -H "Authorization: Bearer $STARTUPGRAPH_KEY" https://startupgraph.dev/api/companies/anthropicEvery call carries a key, free ones included, so abuse is one key to cut and every key's usage is visible. 1,000 calls a day free against the quarterly snapshot. Paid keys read the live feed as facts land. Earn calls by contributing facts, or pay for live.
What the agent sends, and what comes back. Answers are tool results, not prose. The agent writes the prose. Every example below was run against the dataset on 2026-10-12; the outputs are real.
// 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 }) // raised_since works today; hiring does not yet
coverage says so, and an agent that asks today gets a structured "not available" rather than a guess.Same names on the MCP server and as REST paths 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_companycoveragePublished on the front page because an agent that can't see the gaps will fill them with guesses. Live at GET /api/coverage. Free keys will read the snapshot as of the last quarter end once it is materialised (#125); until then every key reads live data and free keys see changes_since up to the quarter boundary.
| Field | Rows | Status | Note |
|---|---|---|---|
| Companies | 69,960 | ok | 52,644 from Companies House (UK), 7,706 from Wikipedia lists, 5,604 from YC. |
| Funding rounds | 184 | gap | 32 companies. Newest round 2026-02-15. Target: match published quarterly deal counts. |
| Headcount by quarter | 191 | gap | Histories exist but are not yet source-backed. Treated as unverified. |
| Open roles | 0 | gap | ATS board pulls not started. |
| People | 233 | gap | Founders and executives for 99 companies. |
| Open source projects | 1,021 | ok | Stars as of import. Weekly refresh: roadmap, #140. |
The gaps above are the work. Tell your agent what you know, in plain words. It files the fact with a source. When the fact verifies, your key earns calls.
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: 100 }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: 50 }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.Sources we trust without a second source: the company's own site, Companies House, SEC filings, and press outlets on the allow-list. Everything else needs two.
changes_since down to the minuteUpgrade from your agent: POST /api/billing/checkout with your key returns a Stripe Checkout link; the webhook flips the key to live. No seats, no dashboard, no sales call. A key is a key. Every tier is keyed so one abusive key gets cut without touching anyone else, and GET /api/keys/me shows what yours has been doing.