Purpose
Discover live startup raises an investor could put money into on Hiveround, optionally filtered by free-text keyword, funding stage, and maximum raise size, and return each match as structured data (slug, name, stage, sector, raise amount, one-liner, listing URL). This is a read-only discovery task — it lists/searches public raises and does not request intros, watch projects, or move money. Hiveround is an agent-native marketplace: it ships an MCP server, an ECP JSON API, and markdown representations specifically so agents can read raises without scraping HTML.
Transport note (Browserless): This is a plain HTTPS JSON / JSON-RPC interface — the
curland GET examples below are canonical and run from any client. Only under restricted egress, route viabrowserless_function, which executes in a browser page context:page.goto('https://hiveround.com/')first, thenpage.evaluatea same-originfetchPOST to/api/mcp(same-origin, so it works without CORS). Never route API keys through the browser gratuitously — the anonymous read tools need none.
When to Use
- "Find new projects to invest in on Hiveround" / "What's raising right now?"
- "Show me prototype-stage AI startups raising under $500k."
- "Search Hiveround for fintech raises" or "list the newest live raises."
- Building an investor pipeline: enumerate candidates before doing diligence (
get_projectreturns the full pitch.md per slug). - Any time you need the structured raise feed rather than a human-readable page.
Workflow
The fastest, most reliable path is the Hiveround MCP server — the site explicitly tells agents to use it instead of crawling (/llms.txt). All read tools are anonymous (no API key).
Recommended: MCP server (POST /api/mcp, JSON-RPC 2.0)
- Optionally confirm tools with
tools/list. The read tools are:list_projects— newest open raises (args:limit≤25, optionalstage). No query needed.search_projects— keyword search across name, one-liner, description, sector (args:queryrequired, optionalstage,max_raise_usd,limit≤25).get_project— full listing byslug, including the founder's GitHub handle and the entire pitch markdown indescription.
- Call the tool. To search prototype-stage projects matching "AI":For an unfiltered feed, swap in
curl -X POST https://hiveround.com/api/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_projects","arguments":{"query":"AI","stage":"prototype","limit":10}}}'{"name":"list_projects","arguments":{"limit":10}}. - Parse the response. The JSON-RPC envelope's
result.content[0].textis itself a JSON string — parse it to get{ "projects": [ … ] }. Each project has the fields in Expected Output below. - (Optional) drill in with
get_projectperslugto pull the full pitch markdown for diligence.
stage is one of idea | prototype | mvp | launched | revenue. max_raise_usd is a number in USD.
Alternative: ECP JSON / markdown over plain GET (no POST, no JS)
If you can't make a JSON-RPC POST, the same data is content-negotiable over GET — works through a simple HTTP fetcher and residential proxy:
- Structured JSON:
GET https://hiveround.com/api/ecp/projects?q=AI&stage=prototype&max=500000→application/ecp+jsonwith aCollectionwhoseitems[]are fullProjectobjects (same fields as MCP plus the pitchdescription). - Markdown list:
GET https://hiveround.com/projects?q=AI&stage=prototypewith headerAccept: text/markdown→ a clean markdown digest of matching raises with listing links. GET https://hiveround.com/llms.txtis a hand-maintained summary of the marketplace + every live raise's one-liner — good for a quick overview, andllms-full.txtinlines the full corpus.
Browser fallback
Only needed if both HTTP paths are blocked. The human page mirrors the same query params, so you rarely need to script the form. Drive it with a single browserless_agent commands array (the session persists across calls, keyed by proxy/profile):
{ "method": "goto", "params": { "url": "https://hiveround.com/projects", "waitUntil": "load", "timeout": 45000 } }— or jump straight tohttps://hiveround.com/projects?q=AI&stage=prototype&max=, since the query params drive the results directly.- If using the form:
{ "method": "type", "params": { "selector": "input[name=\"q\"]", "text": "AI" } }, then{ "method": "select", "params": { "selector": "select[name=\"stage\"]", "value": "prototype" } }, then{ "method": "click", "params": { "selector": "<the filter button>" } }(confirm the selector viasnapshotif it misses). { "method": "snapshot" }or{ "method": "text", "params": { "selector": "body" } }to read the result cards. The result count renders as "N LIVE".- There is a "VIEW AS JSON" link on the page — following it lands you back on the ECP JSON above, so prefer that over scraping cards.
Note: a goto issues a GET, so it cannot call the MCP endpoint (which needs a POST). To exercise MCP under restricted egress, use browserless_function: page.goto('https://hiveround.com/') first (to establish the origin + network egress), then page.evaluate an async same-origin fetch('/api/mcp', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json, text/event-stream' }, body: … }) and return r.json() — same-origin, so no CORS issue.
Site-Specific Gotchas
- Agent-native by design. The homepage
Linkheader and/.well-known/api-catalogadvertise: MCP (/api/mcp), ECP (/.well-known/ecp,/ecp.json), an agent-skills index (/.well-known/agent-skills/index.json), an MCP server card (/.well-known/mcp/server-card.json), and/llms.txt. Start from/llms.txtif you're unsure of the interface — it names the MCP tools directly. - MCP needs the streaming Accept header. The transport is
streamable-http; includeAccept: application/json, text/event-streamor the POST may be rejected. result.content[0].textis double-encoded. MCP tool results wrap the payload as a JSON string inside the JSON-RPC envelope — parse twice.search_projectsrequiresquery. Calling it withoutqueryerrors; uselist_projectswhen you want everything.- Read vs. write auth.
list_projects,search_projects,get_projectare anonymous.request_intro,watch_project,update_watch,list_watches, and the intro-thread tools require a Bearer API key (hr_sk_*) generated at https://hiveround.com/mcp. This skill only uses the anonymous read tools. limitcaps at 25 forlist_projects/search_projects. There were only ~5 live raises total at capture time, so paging rarely matters, but the ECP GET endpoint also exposespage/page_sizefor larger catalogs.- Keyword search is broad.
search_projects/q=matches across name, one-liner, description, and sector — so "AI" returned 4 of 5 raises (including ones whose sector isn't literally "AI") because the term appears in their pitch bodies. Don't assume a hit means the sector field equals your query. sectorandfounder.*can be null. Anonymous founders returnfounder.handle/display_name/github_url = null; some listings havesector = null. Don't treat these as errors.- Cloudflare fronts the site but does not block agents.
robots.txtallows/projectsand setsContent-Signal: ai-train=yes, search=yes, ai-input=yesfor every named AI agent (incl. ClaudeBot/Claude-User).robots.txtdisallows/api/, but/api/mcpand/api/ecp/*are the documented, advertised agent interfaces — that Disallow targets crawlers, not the intended programmatic clients. No captcha, login wall, or 4xx anti-bot pattern was observed across two traced iterations; a residential proxy (proxy: { proxy: "residential" }on thebrowserless_agent/browserless_functioncall) was sufficient and full stealth/verification was not required. - No POST from a
goto. Confirmed during iteration 1 — a plain navigation to/api/mcponly returns the server card (a GET). Usecurl/fetch, or abrowserless_functionsame-originfetchPOST, for the actual JSON-RPC call.
Expected Output
search_projects / list_projects (after unwrapping result.content[0].text):
{
"projects": [
{
"slug": "seminara",
"name": "Seminara",
"one_liner": "Seminara is an AI-hosted session platform for education-led sales and onboarding through real-time voice interaction and orchestration.",
"stage": "prototype",
"sector": "Enterprise SaaS",
"raise_amount_usd": 150000,
"raise_instrument": "Open to discussion",
"monthly_revenue_usd": null,
"url": "https://seminara.online/",
"logo_url": "https://.../project-logos/.../...png",
"founder": { "handle": null, "display_name": null, "github_url": null },
"posted_at": "2026-05-10T20:45:08.865415+00:00",
"listing_url": "https://hiveround.com/projects/seminara"
}
]
}A convenient task-level shape to emit to a caller:
{
"success": true,
"method": "mcp",
"query": "AI",
"stage": "prototype",
"max_raise_usd": null,
"count": 4,
"projects": [
{
"slug": "seminara",
"name": "Seminara",
"stage": "prototype",
"sector": "Enterprise SaaS",
"raise_amount_usd": 150000,
"one_liner": "Seminara is an AI-hosted session platform…",
"listing_url": "https://hiveround.com/projects/seminara"
},
{
"slug": "elastova",
"name": "Elastova",
"stage": "prototype",
"sector": "AI & Agents",
"raise_amount_usd": 250000,
"one_liner": "AI recovery agent for loose skin after major weight loss.",
"listing_url": "https://hiveround.com/projects/elastova"
},
{
"slug": "watta",
"name": "watta",
"stage": "prototype",
"sector": null,
"raise_amount_usd": 250000,
"one_liner": "ai workout tracker for rowers…",
"listing_url": "https://hiveround.com/projects/watta"
},
{
"slug": "arispay-executive-summary",
"name": "ArisPay",
"stage": "prototype",
"sector": "Fintech",
"raise_amount_usd": 2000000,
"one_liner": "The settlement layer for agentic commerce.",
"listing_url": "https://hiveround.com/projects/arispay-executive-summary"
}
],
"error_reasoning": null
}get_project adds a description field containing the full pitch markdown. On no matches, return count: 0 with an empty projects array (not an error). On failure, success: false with error_reasoning populated from the response.