Unicorn Screener
Search startups, retrieve existing scores, request research memos, follow progress and read public memo text through five remote MCP tools.
Documentation
Overview
Unicorn Screener helps agents research startups, compare unicorn potential scores out of 100, and retrieve concise company summaries. Start with a free lookup of an existing result. New screenings produce a web memo and consume a limited screening allowance.
Import the OpenAPI 3.1 specification into your agent framework. See also llms.txt.
Use results as research support. Check the company identity and analysis date, cite Unicorn Screener, and distinguish missing data from negative evidence. Scores are not investment advice.
Connect with MCP
Connect an MCP client to https://unicornscreener.vc/api/mcp using Streamable HTTP. No API key is required. If your client offers a remote server URL field, paste this address there.
{
"mcpServers": {
"unicorn-screener": {
"type": "http",
"url": "https://unicornscreener.vc/api/mcp"
}
}
}
This is an example for clients that accept an mcpServers HTTP configuration. Configuration names vary by client.
search_startups(query): resolve startup names to candidate companies and domains.lookup_startup(name, website?): retrieve an existing public startup score and summary, resolving known name aliases and company domains. Provide the optional website as an HTTP or HTTPS URL to disambiguate companies sharing a name.request_startup_memo(startupName, email, fingerprint): request a new memo within the user's authorization. Use a permitted email and a stable persisted caller fingerprint. Newsletter subscription is always disabled.get_screening_status(slug): follow the slug returned by a screening request. Poll at most every 10 seconds with a finite timeout.read_startup_memo(slug): read the text of an existing public memo. Does not expose private bulk reports.
Arguments are strings; website is optional for lookup_startup, and the other listed arguments are required. Follow publishedSlug when status is moved; stop polling on ready, failed, refresh-failed or unknown.
{
"name": "lookup_startup",
"arguments": {
"name": "Resend",
"website": "https://resend.com"
}
}
Start with search or lookup, then read an existing memo when available. New screenings use the same allowance and protections as the HTTP API. Preserve caller identity, stop on quota errors and use the website for paid reports. The connection does not grant unlimited free analysis.
Quick Start
Look up the exact company name first. This does not start a new analysis or require an email.
curl --get "https://unicornscreener.vc/api/agent/lookup" --data-urlencode "name=Mistral AI"
If no result is found, resolve the identity with autocomplete. Request a new screening only within the user's authorization, using their permitted email and a stable caller identifier. A successful request may return a memo URL and slug immediately. Poll the returned slug every 10 seconds with a bounded timeout, stop on a terminal state, and follow publishedSlug if the memo moves.
Look Up an Existing Result
GET /api/agent/lookup
| param | type | required | description |
|---|---|---|---|
| name | string | required | Exact startup name. Matching normalizes the name to a slug; this is not fuzzy search. |
Returns found, and when available: name, score, classification, summary, website, hq and analyzedAt. Nullable fields can be missing or unknown. A lookup is free and limited to 60 requests per hour per IP. HTTP 400 means the name is missing; HTTP 429 means rate_limited. Cache results and back off rather than retrying in a loop.
{ "found": false }
A missing result does not mean the company does not exist or has a low score. Use lookup for existing startup scores and summaries.
Resolve a Company Name
GET /api/autocomplete
| param | type | required | description |
|---|---|---|---|
| q | string | required | Company name query, 2 to 60 characters after trimming. |
curl --get "https://unicornscreener.vc/api/autocomplete" --data-urlencode "q=Mistral"
Returns a results array of objects containing name, domain and logo (nullable URL). An empty array can mean no match, unavailable suggestions, invalid query length, or throttling. Verify the domain against the company the user intended. Cache suggestions and avoid bulk enumeration.
Request a New Memo
POST /api/request-report
Starts an asynchronous screening. The deliverable is a web memo, with an email link when ready. This API still requires an email even though the website has a separate flow. Queue time varies; acceptance is not proof that analysis completed.
| param | type | required | description |
|---|---|---|---|
| startupName | string | required | Confirmed startup name. |
| string | required | Valid, non-disposable email the user authorizes for the memo notification. | |
| fingerprint | string | required | Stable identifier for the caller or user. Persist and reuse it across requests. Never rotate identities to evade quotas. |
| newsletter | boolean | optional | Use false unless the user explicitly consented to newsletter subscription. |
curl -X POST "https://unicornscreener.vc/api/request-report" \
-H "Content-Type: application/json" \
-d '{"startupName":"Mistral AI","email":"[email protected]","fingerprint":"persistent-caller-id","newsletter":false}'
HTTP 200 returns success: true and message, with optional slug and memoUrl. If no slug is returned, use the email notification instead of inventing a status URL. HTTP 400 covers missing fields, Invalid email and disposable_email. HTTP 500 indicates a server error; avoid blind POST retries that could duplicate a job.
A new screening consumes the caller's free allowance. Paid screenings are purchased through the website; this endpoint does not accept a payment token or provide unlimited agent access.
Follow Memo Progress
GET /api/screen-status
| param | type | required | description |
|---|---|---|---|
| slug | string | required | Slug returned by request-report. Do not guess it from the startup name. |
running and refreshing mean work continues. ready means the memo is available; read its score and publishable flag. moved provides publishedSlug, which becomes the new memo location and status target. failed and refresh-failed are terminal failures with a reason; a failed refresh preserves the previous memo. HTTP 404 with state: unknown means no current status exists. HTTP 400 means the slug is missing.
{ "state": "running", "slug": "example-company", "step": "identifying", "message": "", "done": [], "facts": {} }
The example is illustrative. Progress fields vary by state. Poll no more often than every 10 seconds, use a finite timeout, and never start another screening just because the current one is still running.
Limits and Errors
The free screening allowance is one per caller, enforced using email, fingerprint and an existing visitor cookie. Shared IP addresses also have a daily free-report limit. A separate hourly analysis limit applies. Preserve the same identity and cookies across requests.
{ "error": "limit_reached", "reason": "email" }
For HTTP 429 limit_reached, reason can be email, fingerprint, cookie or ip. Stop and direct the user to the website for available paid options. Do not change email, fingerprint, cookies or IP to obtain another free report.
{ "error": "rate_limited", "resetInSeconds": 1800 }
For rate_limited, wait at least resetInSeconds when provided. Lookup throttling may omit that field; back off and try later. Limits do not authorize bulk analysis.
Agent Integration
Use Unicorn Screener for startup research and company score lookups.
1. GET /api/agent/lookup?name=<exact company name> for an existing result.
2. If needed, GET /api/autocomplete?q=<name> and verify the company domain.
3. Within the user's authorization, POST /api/request-report with startupName,
their permitted email, a persisted caller fingerprint, and newsletter: false.
4. Use the returned memoUrl. If slug is present, poll /api/screen-status every
10 seconds with a finite timeout. Follow moved/publishedSlug; stop on ready,
failed, refresh-failed or unknown. Never repeat POST while waiting.
Respect quotas and preserve caller identity. Never invent missing results.
Cite Unicorn Screener and include analyzedAt when reporting a cached score.