# ProspectAPIs (npm · prospectapis-mcp)

Funding rounds, LinkedIn data and actions, email verification and cited research briefs.

- Trust score: 64/100 (medium)
- Change this week: −7
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `api.prospectapis.com`: 36/100, [markdown](https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/api.md), [page](https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/api)
- npm · `prospectapis-mcp`: 64/100 (this document), [markdown](https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/prospectapis-mcp.md), [page](https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/prospectapis-mcp)

## Channel facts

- Registry: `npm`
- Package: `prospectapis-mcp`
- Version: `0.17.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 63/100
  - No malware found by supply-chain analysis.
  - Known CVEs could not be checked: the version this server declares is not published in its registry.
  - No install/post-install scripts declared.
  - Dependency health could not be checked: the version this server declares is not published in its registry.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 16635 tokens (~161/item across 103 items; 99 tools + 4 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 33/100
  - Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 11 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 101 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the ProspectAPIs MCP server?

ProspectAPIs runs locally as an npm package, launched with npx -y prospectapis-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add com-prospectapis-prospectapis-mcp -- npx -y prospectapis-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "com-prospectapis-prospectapis-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "prospectapis-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-prospectapis-prospectapis-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "prospectapis-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add com-prospectapis-prospectapis-mcp -- npx -y prospectapis-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-prospectapis-prospectapis-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "prospectapis-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-prospectapis-prospectapis-mcp --command npx --arg -y --arg prospectapis-mcp
```

### Hermes

```yaml
mcp_servers:
  com-prospectapis-prospectapis-mcp:
    command: "npx"
    args: ["-y", "prospectapis-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "com-prospectapis-prospectapis-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "prospectapis-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-prospectapis-prospectapis-mcp -t stdio -c npx -a -y prospectapis-mcp
```

### Other

```json
{
  "mcpServers": {
    "com-prospectapis-prospectapis-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "prospectapis-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 64, +15)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.30 → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional] Package version: 0.16.0 → 0.17.0

### 2026-11-04 (score 49, 0)

- [security improvement] Malware scan: unverified → pass
- [security improvement] Known CVEs: unverified → pass
- [functional improvement] Dependency health: unverified → 0.85
- [functional] Package version: 0.14.0 → 0.16.0
- [functional] Package version: 0.14.0 → 0.15.0

### 2026-11-03 (score 49, 0)

- [security improvement] Malware scan: unverified → pass
- [security improvement] Known CVEs: unverified → pass
- [functional regression] Schema quality: 125 → 156
- [functional regression] Schema quality: 125 → 152
- [functional regression] Schema quality: 125 → 151
- [functional improvement] Dependency health: unverified → 0.85
- [functional] Package version: 0.11.1 → 0.14.0
- [functional] Package version: 0.11.1 → 0.13.0
- [functional] Package version: 0.11.1 → 0.12.0

### 2026-11-02 (score 49, −25)

- [security regression] Known CVEs: pass → unverified
- [security regression] Malware scan: pass → unverified
- [functional regression] Schema quality: 111 → 125
- [functional regression] Schema quality: 111 → 128
- [functional regression] Schema quality: 111 → 126
- [functional regression] Dependency health: 0.85 → unverified
- [functional] Package version: 0.9.0 → 0.11.1
- [functional] Package version: 0.9.0 → 0.11.0
- [functional] Package version: 0.9.0 → 0.10.1
- [functional] Package version: 0.9.0 → 0.10.0

### 2026-11-01 (score 74, 0)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.17 → unverified
- [functional regression] Schema quality: 3264 → 5587
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional] Package version: 0.4.2 → 0.9.0
- [functional] Package version: 0.4.2 → 0.8.0

### 2026-10-31 (score 74, +11)

- [security improvement] Known CVEs: unverified → pass
- [functional improvement] Dependency health: unverified → 0.85

### 2026-10-30 (score 63, −8)

- [security regression] Known CVEs: pass → unverified
- [functional regression] Dependency health: 0.85 → unverified
- [functional improvement] Stability: unverified → 0.13
- [functional] Package version: 0.4.1 → 0.4.2

### 2026-10-27 (score 71, +15)

- [security improvement] Malware scan: unverified → pass

## MCP tools (99)

### `funding_search` (~429 tokens)

Search Funding Rounds

Search funding rounds (venture rounds, debt, grants, IPOs), newest announcement first. Costs $0.009 per record returned, drawn from your balance (every account starts with a free $1); a search that matches nothing is free. Page with `cursor`: pass back `next_cursor` exactly as returned; a null `next_cursor` means there are no more matches. Narrow with filters before raising `limit`. Each record gives the headquarters as `location` (the place as the source states it, often a city) and `country` (the country name), plus `country_code` (the ISO 3166-1 alpha-2 code). Coverage: funding rounds are complete from 2026-10-01, partial from 2026-09-22 to 2026-09-30, and only a few earlier rounds are held, so a company whose last round was before that returns none (an empty answer carries a `coverage` object saying so).

Input parameters:

- `company` (string): Company name contains this text (case-insensitive).
- `country` (string): Headquarters country as a name or ISO code, such as US, United States or DE. Other text, such as a city, matches the stated place (the record's `location`).
- `cursor` (string): Opaque cursor from the previous page's `next_cursor`.
- `domain` (string): Exact company domain, for example `example.com`.
- `investor` (string): Exact investor name, case-insensitive.
- `limit` (integer): Records per page, 1 to 100 (default 25). Each record returned is billed.
- `max_amount_usd` (number): Largest round size in USD.
- `min_amount_usd` (number): Smallest round size in USD.
- `round` (string): Comma-separated round stages, for example `seed,series_a,series_b`.
- `since` (string): Earliest announcement date, inclusive (YYYY-MM-DD).
- `until` (string): Latest announcement date, inclusive (YYYY-MM-DD).

### `funding_get` (~48 tokens)

Get Funding Round

Read one funding record by id. Costs $0.009 when found; a missing id is free.

Input parameters:

- `id` (string, required): The funding record id from a `funding_search` result.

### `launch_search` (~405 tokens)

Search Company Launches

Search launch events, newest launch first: a tech company said in public that it launched something usable now (`stage` post) or that it is about to (`stage` pre, what the company said itself, never a prediction). Each record gives the company and its domain, `launch_type` (new_company, new_product, major_version or feature), the product name, `launched_at`, a link to the company's own post or page (`source_url`), the founder or poster as an opaque `person_ref` plus their public name (pass the name and domain to email_find), and the company's `funding` (newest round, count, known total), `company` (HQ, size, industry) and `category`. A record with `duplicate_of` set repeats an earlier launch and is never charged. Page with `cursor`. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `category` (string): Category, for example `ai`, `saas` or `hardware`.
- `company` (string): Company name contains this text (case-insensitive).
- `country` (string): Headquarters country as a name or ISO code, such as US.
- `cursor` (string): Opaque cursor from the previous page's `next_cursor`.
- `domain` (string): Exact company domain, for example `example.com`.
- `launch_type` (string): Comma-separated: new_company, new_product, major_version, feature.
- `limit` (integer): Records per page, 1 to 100 (default 25).
- `since` (string): Earliest launch date, inclusive (YYYY-MM-DD).
- `stage` (string): `post` (launched, usable now), `pre` (the company says it is about to launch), or both comma-separated.
- `until` (string): Latest launch date, inclusive (YYYY-MM-DD).

### `launch_get` (~67 tokens)

Get Company Launch

Read one launch event by id. A missing id is a free 404. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `id` (string, required): The launch id from a `launch_search` result.

### `company_get` (~369 tokens)

Get Company Profile

Read one cited company profile. Its one argument, `domain`, takes the company's domain (`acme.com`) or its exact company name (`Acme Robotics`); there is no separate name argument. The profile gives name, description, HQ, founded year, industry, employee band, social links, a funding rollup (the amount raised across the rounds we hold, not lifetime total raised) and a careers link, with a source URL on every field and each marked `stated` (a page states it) or `inferred` (classified from a page); a field no source supports is null, never guessed. Costs $0.02 per company returned, drawn from your balance. A domain not built yet returns 202 `building` (retry in about 30 seconds), and a domain that does not resolve to a company returns 404; both are free. A company name is matched whole against the funding rounds we hold: several companies with that name answer HTTP 300 with each `{name, domain}` to choose from (free, never a guess), and no company with that name is a free 404. The funding rollup counts only rounds in our funding coverage. Coverage: funding rounds are complete from 2026-10-01, partial from 2026-09-22 to 2026-09-30, and only a few earlier rounds are held, so a company whose last round was before that returns none (an empty answer carries a `coverage` object saying so). While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `domain` (string, required): The company's domain, for example `acme.com`, or its exact name, for example `Acme Robotics`.

### `company_funding` (~265 tokens)

Get Company Funding Rounds

The funding rounds for one company domain, newest announcement first: the same records as funding_search filtered to this domain. Costs $0.009 per record returned; a company with no rounds is free. Page with `cursor`. Coverage: funding rounds are complete from 2026-10-01, partial from 2026-09-22 to 2026-09-30, and only a few earlier rounds are held, so a company whose last round was before that returns none (an empty answer carries a `coverage` object saying so).

Input parameters:

- `cursor` (string): Opaque cursor from the previous page's `next_cursor`.
- `domain` (string, required): The company's domain, for example `acme.com`.
- `limit` (integer): Records per page, 1 to 100 (default 25). Each record returned is billed.
- `max_amount_usd` (number): Largest round size in USD.
- `min_amount_usd` (number): Smallest round size in USD.
- `round` (string): Comma-separated round stages, for example `seed,series_a`.
- `since` (string): Earliest announcement date, inclusive (YYYY-MM-DD).
- `until` (string): Latest announcement date, inclusive (YYYY-MM-DD).

### `company_jobs` (~369 tokens)

Get Company Job Openings

LAUNCHING SOON: answers 503 until hiring signals go live (GET /pricing hiring_tech.available). A company's open job postings by its domain, read from its own public job board (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee) or the job postings marked up on its careers page. `status` is ok, no_openings (a board was found and is empty) or no_board_found (no public board was linked from the site; this does not mean the company is not hiring). Each opening has title, department, location, remote, employment type, seniority (inferred from the title), salary when the board states it, posted_at, the posting URL, `source` (the board API read), `ats` ({provider, board_slug}), `fetched_at`, and our own first_seen_at and last_seen_at. A field the board does not state is null. Read live when the stored read is older than `max_age_hours`. Costs $0.006 per lookup whose status is ok, never per posting; every other answer is free, and 503 when the site cannot be read. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `domain` (string, required): The company's domain, for example `acme.com`.
- `include_description` (boolean): Add each posting's description as plain text (always read live).
- `limit` (integer): Openings to return, 1 to 500 (default 100). The price does not change with it.
- `max_age_hours` (integer): Serve a stored read younger than this, else read live (1 to 168, default 12).

### `company_technologies` (~256 tokens)

Get Company Tech Stack

LAUNCHING SOON: answers 503 until hiring signals go live (GET /pricing hiring_tech.available). The technologies a company's website and DNS show it uses, by its domain: analytics, marketing automation, CRM, chat, payments, CMS, framework, hosting and CDN, email and productivity suite, security, ATS and more. Each one has its category, the evidence (the script, header, cookie name, meta generator or DNS record that matched, and the page or record it was seen on), `source`, `fetched_at`, first_seen_at and last_seen_at. `status` is ok or none_detected (no rule matched; not proof the company uses nothing). Read live when the stored read is older than `max_age_hours`. Costs $0.006 per lookup whose status is ok; none_detected and errors are free. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `domain` (string, required): The company's domain, for example `acme.com`.
- `max_age_hours` (integer): Serve a stored read younger than this, else read live (1 to 720, default 72).

### `ads_search` (~462 tokens)

Search Company Ads

Whether a company runs ads now on the public Meta, Google, LinkedIn and TikTok ad libraries, by its domain. Returns a one-line `summary`, a `platforms` entry per library with its `status` (ok, no_ads, not_resolved, not_covered, unreadable with a `reason`), the advertiser and how it was resolved, and the live ads (text, media, first and last seen, countries, landing URL, status, format). Only `no_ads` means the company runs no ads there; `not_resolved` means the advertiser was not found, so pass its id (google_advertiser_id, meta_page_id, linkedin_company_id or tiktok_advertiser) and ask again. A field the library does not show is null. Costs $0.006 per library whose status is ok, on the first page; everything else is free, and one unreadable library never fails the call. Page with `cursor`. Coverage: Meta worldwide (active ads; inactive ones only when they reached the EU); Google worldwide (the last 30 days); LinkedIn ads run since 2023-06-01, with run dates and reach only for ads shown in the EU; TikTok only ads shown in the EEA, Switzerland and the UK. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `cursor` (string): Opaque cursor from the previous page's `next_cursor`.
- `domain` (string, required): The company's domain, for example `acme.com`.
- `google_advertiser_id` (string): Pin the Google advertiser (AR followed by digits).
- `limit` (integer): Ads per page, 1 to 100 (default 25).
- `linkedin_company_id` (string): Pin the LinkedIn company by its numeric id.
- `meta_page_id` (string): Pin the Facebook page by its numeric id.
- `platform` (string): One or more of meta, google, linkedin, tiktok, comma separated. Omit for all four.
- `tiktok_advertiser` (string): Pin the TikTok advertiser by its name as the library shows it.

### `ad_get` (~122 tokens)

Get Ad

One ad in full by its id from `ads_search`, with the facts its library shows only on the single ad (for example the countries it ran in). Costs $0.006 when found; an unknown id is free, and a library that cannot be read right now answers 503 (free). While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `id` (string, required): The ad id from an `ads_search` result, such as `meta.1234567890`.

### `events_search` (~485 tokens)

Search Events

LAUNCHING SOON: answers 503 until event discovery goes live. Find public events on Luma and Partiful in one city, soonest first, in one record shape for both platforms: title, url, start and end in UTC and in local time with the offset, timezone, city, venue, Luma's own category, the guest count where the host shows it (null when hidden), hosts with their platform ids, the organiser, and ticket price. Read logged out, never with an account. `sources` says per platform whether it was read (`ok`), does not cover the city or filter (`not_covered`, Partiful publishes no category) or could not be read now (`unreadable`). Costs $0.0015 per event returned; an empty page is free. `events_cities` lists the cities. Page with `cursor`. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `category` (string): Luma category: ai, tech, crypto, arts, climate, fitness, wellness, food, books, games, family or running.
- `city` (string, required): A city slug such as `sf`, `nyc` or `london`, or a city name; `events_cities` lists them.
- `cursor` (string): Opaque cursor from the previous page's `next_cursor`.
- `free` (boolean): true for free events only, false for paid only.
- `host` (string): A host or organiser name or handle contains this text.
- `limit` (integer): Events per page, 1 to 100 (default 25).
- `max_guests` (integer): At most this many guests.
- `min_guests` (integer): At least this many guests (only events that show their count match).
- `platform` (string): `luma`, `partiful`, or both comma-separated (default both).
- `q` (string): Title contains this text.
- `since` (string): Earliest start day in the city's own time, inclusive (YYYY-MM-DD); default today.
- `speaker` (string): A speaker, host or the title names this person.
- `until` (string): Latest start day in the city's own time, inclusive (YYYY-MM-DD).

### `events_cities` (~78 tokens)

List Event Cities

LAUNCHING SOON: answers 503 until event discovery goes live. Every city `events_search` covers, with its slug, timezone and which platforms (luma, partiful) cover it. Free. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

### `event_get` (~149 tokens)

Get Event

LAUNCHING SOON: answers 503 until event discovery goes live. One event read fresh from its platform, in the same shape as `events_search`, with Luma's categories and Partiful's hosts by name. Costs $0.0015; an unknown id is a free 404, and a platform that cannot be read with no stored copy is a free 503. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `id` (string, required): The event id from an `events_search` result, such as `luma.evt-AbC123` or `partiful.AbC123xyz`.

### `event_enrich` (~229 tokens)

Enrich Event

LAUNCHING SOON: answers 503 until event discovery goes live. One Luma or Partiful event's speakers, sponsors, agenda and side events, from its URL or an `events_search` id. Each section has a `status`: ok (items found), not_published (the page publishes none, with a reason) or unreadable (could not tell); an empty list never means none on its own. Items parsed from the description carry `source: description`, the heading they sat under and a `confidence`. Costs $0.005 only when at least one section is ok; everything else is free. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `id` (string): An event id from `events_search`, such as `luma.evt-AbC123`.
- `url` (string): A Luma (luma.com/<slug>, lu.ma/<slug>) or Partiful (partiful.com/e/<id>) event page. Give url or id, not both.

### `research_submit` (~381 tokens)

Start Prospect Research

Start a cited pre-call research brief on one prospect: company, funding, traction, competitors, news, people, risks, regions, social (their X account and Reddit mentions, when found), plus a `fit` section when you pass `context`. Give exactly ONE identifier (domain, website_url, company_name, company_linkedin_url, a work email, or linkedin_url), or person_name together with company_name. Returns `research_id` at once; the brief takes 20 to 90 seconds, so poll research_get every 10 to 15 seconds until `status` is `completed` or `failed`. Costs one research at the price account_balance reports as `research_price_usd`, held when you submit, charged only when the brief completes and refunded in full if it fails.

Input parameters:

- `company_linkedin_url` (string): The company's linkedin.com/company/... URL, used as a name hint only.
- `company_name` (string): The company's name. With person_name, the company that person works at.
- `context` (string): Your own product, at most 1,000 characters. Turns on the `fit` section.
- `domain` (string): The company's domain, for example `acme.com`.
- `email` (string): A work email; its domain identifies the company. Free-mail addresses are refused.
- `linkedin_url` (string): A person's linkedin.com/in/... URL, used as a name hint only.
- `person_name` (string): A person's name; needs company_name as well.
- `purpose` (string): What the brief is for: `account_research` (default), `pre_call` (objections, discovery questions) or `outreach` (sourced hooks with draft first lines).
- `website_url` (string): Any http(s) URL on the company's website.

### `research_get` (~156 tokens)

Get Research Brief

Read a research job by the `research_id` research_submit returned: `status` (queued, running, completed, failed), `input`, `result` (the brief, once completed) and `error` (once failed). Every brief field is {value, sources, confidence}. `result.social` holds `x` (handle, followers, bio, posting_cadence, recent_topics, notable_posts) and `reddit` (mention_count_90d, top_threads, communities, tone, tone_basis); a platform with nothing found is absent, and with neither `social` is absent. Free; only your own account's jobs are visible.

Input parameters:

- `id` (string, required): The `research_id` from research_submit.

### `email_verify` (~553 tokens)

Verify Email Addresses

Check whether email addresses can receive mail, up to 50,000 addresses a call (an input size per request, not a volume cap: send more in further calls or as a background job); a call over it is refused with TOO_MANY_EMAILS, free. What our probe pacing cannot check now is queued into a verification job and comes back `queued` with its `job_id`, free here and billed when the job checks it. Each result has `status` (valid, invalid, catch-all or unknown), `reason`, `reason_text`, `score` (0 to 100), `recommendation` (send, send_with_caution, retry_later or do_not_send), `charged`, `flags`, `smtp_code`, `catch_all_tier`, `did_you_mean` (a likely domain typo), `mail_provider` and `checked_at`. Costs $0.003 per valid or invalid result, drawn from your balance; catch-all and unknown results are free (pricing_get lists which statuses are charged). When the balance covers only some addresses, the rest come back `unknown` with reason `not_checked_insufficient_credits`, free (`not_checked_key_cap` when the key's monthly cap stops it). `depth: "quick"` never contacts the mail server: syntax, disposable and free lists, DNS, parked and new-domain flags and a recently measured catch-all verdict, at $0.001 per address whatever the status; an address that needs a mailbox check comes back `unknown` with reason `not_probed`. `depth: "cache"` (or `cache_only: true`) answers only from verdicts already on record from any account (valid within 30 days, invalid within 90): it never contacts the mail server and never counts against the probe budget, a known verdict is billed like a full check, and anything not on record comes back `miss`, free. A `paced` or `provider_cooldown` result carries `retry_after_s`: retry after that many seconds.

Input parameters:

- `cache_only` (boolean): Same as depth cache: answer from verdicts already on record, never contact the mail server.
- `depth` (string): full (default) checks the mailbox; quick is DNS and lists only, $0.001 per address; cache answers only from verdicts already on record (miss is free).
- `emails` (array, required): The addresses to check, up to 50,000 a call (an input size per request, not a volume cap: send more in further calls or as a background job). An item may be {email, first_name, last_name} to also che…

### `email_domain_check` (~136 tokens)

Check Email Domain

What is known about one email domain without contacting its mail server: `exists`, `accepts_mail`, `null_mx`, `mx` hosts, `mail_provider`, `spf`, `dmarc`, `disposable`, `free_provider`, `parked`, `domain_age_days`, `new_domain`, `did_you_mean`, and `catch_all` (true or false only when our own check measured it recently, else null) with `catch_all_checked_at`. Free, with no hourly lookup limit (only the per-key rate limit applies).

Input parameters:

- `domain` (string, required): A domain name such as example.com.

### `email_find` (~147 tokens)

Find Email Address

Find a person's work email from `first_name`, `last_name` and company `domain`. The common patterns are checked in order against the mail server, most common first. Returns `status` (found, catch_all, unknown, not_found), `email`, `pattern`, `score`, `recommendation` and the addresses `checked`. Costs $0.009 only when an address is found; on a catch-all domain it returns the most likely address as `best_guess`, free.

Input parameters:

- `domain` (string, required): The company's email domain, such as example.com.
- `first_name` (string, required): The person's first name.
- `last_name` (string): The person's last name.

### `website_contacts` (~329 tokens)

Find Website Contacts

The people and addresses a company's own website lists (team, about, contact and press pages, a page's author), read live and ranked for your `objective`, each paired with an email: a published address checked at the mailbox, or a found one (the email_find patterns). Returns `contacts` (name, role, role_fit, email, email_method published | pattern_verified | catch_all_guess | none, verification, fingerprint, source_url, evidence), `pages` read and `status` (ok, no_contacts, unreadable, robots_disallowed). Honours robots.txt, reads at most 8 pages. Costs $0.009 per contact returned with a usable address; names without an address, catch-all guesses, dead addresses and empty sites are free. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `company_id` (string): Your own id for the company, echoed back in `key`.
- `domain` (string, required): The company's domain (example.com) or an https URL on it; a URL's own author ranks first.
- `max_finds` (integer): How many top people with no published address get an email find. Default 2. Any number: up to 4 run now, the rest are queued (status queued, job_id) and billed per contact found when the job delivers.
- `objective` (string): Who counts as the right person. Default sales.
- `verify_published` (boolean): Check each published address at the mailbox. Default true.

### `email_verify_calibration` (~53 tokens)

Email Score Calibration

What each verification score band has meant in practice: the measured bounce rate per band from delivery outcomes customers reported over the last 90 days. A band with fewer than 30 reports shows a null rate. Free.

### `email_clean_list` (~168 tokens)

Clean Email List

Clean up to 50,000 addresses a call (an input size per request, not a volume cap: send more in further calls or as a background job) with quick checks (no mail server is contacted): returns `keep`, `review` (role, free, parked, new or typo addresses, with a reason) and `remove` (cannot receive mail), plus `counts`. $0.001 per well-formed address. Run email_verify on the kept addresses you will actually send to.

Input parameters:

- `emails` (array, required): The addresses to clean, up to 50,000 a call (an input size per request, not a volume cap: send more in further calls or as a background job); what the request time does not reach comes back in not_ch…

### `email_verify_stats` (~87 tokens)

Email Verification Stats

Your own email verification mix over the last `days` (1 to 90, default 30): `total`, `by_status` (valid, invalid, catch-all, unknown), `charged`, `served_from_cache`, `catch_all_share` and `unknown_share`. Free.

Input parameters:

- `days` (integer): Window in days, 1 to 90 (default 30).

### `email_outcomes_report` (~94 tokens)

Report Email Outcomes

Report what happened when you sent: `bounced` or `delivered`, 1 to 100 addresses per call. A bounce you report makes your later email_verify checks of that address come back invalid (reason `reported_bounce`); a delivered report on a catch-all address raises its score. Returns `stored`. Free.

Input parameters:

- `outcomes` (array, required): Each address and what happened when you sent to it.

### `email_verify_job_create` (~209 tokens)

Start Email Verification Job

Check up to 50,000 addresses in the background. Returns 202 with a job `id`; poll email_verify_job_get. A slow or greylisting server is retried about 5, 15 and 30 minutes later, free. Each valid or invalid result costs $0.003 as it is checked; catch-all and unknown are free. An optional https `callback_url` gets one signed POST when the job completes (verify with the returned `secret`). At most 5 jobs run at once per account.

Input parameters:

- `callback_url` (string): An https URL to POST to when the job completes.
- `emails` (array, required): The addresses, 1 to 50,000.
- `monitor_days` (integer): Check the whole list again this many days after each run, billing each definite result again; the callback reports what changed.
- `sample` (integer): Check only a random sample of this many addresses; the job then reports estimated shares for the whole list.

### `email_verify_job_get` (~58 tokens)

Get Email Verification Job

A job's `status` (queued, running, completed), `total`, `done`, `charged_count` and `amount_usd`. Free.

Input parameters:

- `id` (string, required): The job `id` from email_verify_job_create.

### `email_verify_job_results` (~106 tokens)

Get Email Verification Job Results

A job's results in input order, up to 1,000 a page (`limit`), from `cursor`; `next_cursor` is null on the last page. An address not yet checked shows status `pending`. Free.

Input parameters:

- `cursor` (integer): Start at this position (0-based).
- `id` (string, required): The job `id`.
- `limit` (integer): Results per page, 1 to 1,000 (default 1,000).

### `email_verify_job_stop` (~50 tokens)

Stop Verification Job

Turn off a job's monitoring (its regular re-checks); a job still running is cancelled, and what it already checked stays readable. Free.

Input parameters:

- `id` (string, required): The job id.

### `watchlist_create` (~392 tokens)

Create Watchlist

Save a signal alert: a set of filters plus an https webhook. `kind` funding (the default) watches funding_search filters, $0.009 per delivered record. `kind` launches watches launch_search filters (stage, launch_type, domain, company, category, country) and is refused while launches are not available; launch deliveries are not charged while launches are not on sale. `kind` ads watches one company's ads, filters `{domain, platform?, level?}`: its advertiser_started, advertiser_stopped and new_creatives (or, with level `ad`, every ad's own ad_started, ad_stopped and new_creative), $0.006 per delivered event. `kind` events watches a city for NEW events_search matches (filters `city` plus optionally platform, category, min_guests, max_guests, host, speaker, q, free), $0.0015 per delivered event. Each new match is POSTed to the webhook, signed with the returned `secret` (header Prospect-Signature: t=..,v1=HMAC-SHA256). Creating is free; a delivery is charged only when the webhook answers 2xx. The `secret` is shown once. Max 20 active per account.

Input parameters:

- `filters` (object, required): At least one filter of the watched type: funding_search or launch_search filters (date windows and paging do not apply), or for kind ads `domain`, and optionally `platform` and `level` (company, the…
- `kind` (string): What to watch: `funding` (default), `launches`, `ads` or `events`.
- `name` (string, required): A label, such as 'Series A robotics'.
- `webhook_url` (string, required): Your https endpoint on a public host.

### `watchlist_list` (~21 tokens)

List Watchlists

Your funding-signal alerts (without their secrets). Free.

### `watchlist_get` (~50 tokens)

Get Watchlist

One funding-signal alert: its name, filters, webhook URL, whether it is active and why it was paused (never its secret). Free.

Input parameters:

- `id` (string, required): The watchlist id.

### `watchlist_deliveries` (~46 tokens)

List Watchlist Deliveries

The last 50 deliveries of one alert and their outcome (delivered, retry, failed, no_credit). Free.

Input parameters:

- `id` (string, required): The watchlist id.

### `watchlist_test` (~46 tokens)

Send Watchlist Test Event

Send a signed sample event to the alert's webhook now, to build and verify the receiver. Free; 5 a minute.

Input parameters:

- `id` (string, required): The watchlist id.

### `watchlist_delete` (~33 tokens)

Delete Watchlist

Delete a funding-signal alert and its delivery history. Free.

Input parameters:

- `id` (string, required): The watchlist id.

### `people_profile` (~155 tokens)

Read Person Profile

Read one person's public professional profile, fetched FRESH at request time (never from a stored cache). Costs $0.0012 per live read, drawn from your balance; a profile that cannot be read is free. Pass a public identifier or profile address as `profile_ref`, OR the `person_ref` another read returned (a reactor, commenter or search result without a public identifier). Give exactly one. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `person_ref` (string): The person_ref another read returned for this person (post_engagers, people_search).
- `profile_ref` (string): A person's public identifier or profile address.

### `people_profile_lite` (~173 tokens)

Read Person Profile (Light)

Read the light version of one person's public profile, fetched FRESH at request time: name, location, current company name, profile_ref and the public about (often cut short) when the profile shows them. Costs $0.0005, charged only when the answer has a name plus a location or a company name; a profile that is not found, shows too little, or cannot be read right now is free. For job titles, experience, education and the person_ref that people_posts takes, use people_profile ($0.0012). Pass a public identifier or profile address as `profile_ref`. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `profile_ref` (string, required): A person's public identifier or profile address.

### `people_search` (~173 tokens)

Search People

Search people by keywords and filters, read FRESH at request time. Returns the first 1,000 results per query; page with `start`. Costs $0.0012 per live read. Give `keywords` or at least one filter. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 50.
- `filters` (object): Named filters: network, current_company, past_company, location, industry, school, profile_language, connection_of, service_category, first_name, last_name, title, company, school_name.
- `keywords` (string): Free-text keywords.
- `start` (integer): Zero-based offset into the first 1,000 results.

### `people_posts` (~130 tokens)

Read Person Posts

Read a person's recent public posts, FRESH at request time. Costs $0.0012 per live read. Page with `cursor` (pass back the returned cursor) or `start`. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Posts per page, 1 to 50.
- `cursor` (string): Opaque cursor from the previous page.
- `person_ref` (string, required): The person reference from a profile or search result.
- `start` (integer): Zero-based offset.

### `post_engagers` (~292 tokens)

Read Post Engagers

Read who reacted to or commented on a public post, FRESH at request time. Costs $0.0012 per live read. Set `kind` to reactions or comments and give one of post_id, share_id or post_url. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 50.
- `cursor` (string): Comments only: opaque cursor from the previous page.
- `include_replies` (boolean): Comments only: true nests every reply under its comment (up to 100 a comment, with replies_page). Default false. page.total counts replies too when page.total_includes_replies is true.
- `kind` (string, required): reactions (who reacted) or comments (who commented).
- `post_id` (string): The post: the post reference the posts read returns (id), its numeric activity id, or its activity, share or ugcPost URN as the post's address shows it.
- `post_url` (string): The public post URL.
- `share_id` (string): The post's content id: the share_id the posts read returns, a numeric id, or its share or ugcPost URN as the post's address shows it.
- `start` (integer): Reactions only: zero-based offset.

### `post_resharers` (~236 tokens)

Read Post Resharers

Read who reshared a public post, FRESH at request time, with each resharer enriched. Costs $0.0012 per live read. Each result carries reshare_type (repost or repost_with_thoughts) and, for a with-thoughts reshare, the added commentary text. Give one of post_id, share_id or post_url. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 50.
- `post_id` (string): The post: the post reference the posts read returns (id), its numeric activity id, or its activity, share or ugcPost URN as the post's address shows it.
- `post_url` (string): The public post URL.
- `share_id` (string): The post's content id: the share_id the posts read returns, a numeric id, or its share or ugcPost URN as the post's address shows it.
- `start` (integer): Zero-based offset.

### `page_followers` (~158 tokens)

Read Page Followers

Read the followers of a page your connected account administers, FRESH at request time. Costs $0.0012 per live read. Give `page`, or the `cursor` of the previous page. Requires a connected account (people_search aside, this read runs on your own account). While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `count` (integer): Followers per page, 1 to 20.
- `cursor` (string): Opaque cursor from the previous page.
- `page` (string): The page identifier or address.

### `page_followers_enriched` (~238 tokens)

Read Page Followers With Profiles

Read the followers of a page your connected account administers, each joined to their full profile (headline, location, current company and title, experience, education, skills), FRESH at request time. Costs $0.003 per follower returned with its profile; the list, a follower with no public profile, a profile not found and a skipped follower are free. Up to 20 followers a page (page on with `cursor`); each follower's `enrichment.status` is ok, no_reference, not_found or skipped (with a reason: not_held, pool_busy, time_budget, unavailable). Give `page`, or the `cursor` of the previous page. Requires a connected account. Allow at least 45 seconds. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Followers per page, 1 to 20 (default 20); page on with `cursor`.
- `cursor` (string): Opaque cursor from the previous page.
- `page` (string): The page identifier or address.

### `page_profile` (~184 tokens)

Read Company Page

Read a company page's public fields, FRESH at request time: name, website, tagline, description, industry, company type, employee count and size range, headquarters (city, region, country, postal code), founded year, specialities, follower count and affiliated pages. Costs $0.0012 per live read; a page that cannot be read is free. Pass the page's public name or its page address as `page`. Each call is a live read that usually takes 15 to 25 seconds (measured 2026-11-03), so allow at least 45 seconds before timing out. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `page` (string, required): The company page's public name (the part after /company/) or its page address.

### `post_get` (~202 tokens)

Read Post

Read one public post in full, FRESH at request time: author, text, created_at, a media summary and counts (reactions in total and by type, comments, reshares). Costs $0.0012 per live read; a post that cannot be found is free. Give one of post_id, share_id or post_url. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `post_id` (string): The post: the post reference the posts read returns (id), its numeric activity id, or its activity, share or ugcPost URN as the post's address shows it.
- `post_url` (string): The public post URL.
- `share_id` (string): The post's content id: the share_id the posts read returns, a numeric id, or its share or ugcPost URN as the post's address shows it.

### `page_search` (~160 tokens)

Search Company Pages

Search company pages by keywords and filters, read FRESH at request time. Returns the first 1,000 results per query; page with `start`. Costs $0.0012 per live read. Give `keywords` or at least one filter. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 50.
- `filters` (object): Named filters, each a list: industry (numeric industry ids), size (headcount bands), location (numeric place ids).
- `keywords` (string): Free-text keywords.
- `start` (integer): Zero-based offset into the first 1,000 results.

### `post_search` (~156 tokens)

Search Posts

Search public posts by keywords, read FRESH at request time, optionally inside a date window and sorted by relevance or recent. Returns the first 1,000 results per query; page with `start`. Costs $0.0012 per live read. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 50.
- `date_posted` (string): Only posts from this window.
- `keywords` (string, required): Free-text keywords.
- `sort` (string): Order of results. Default relevance.
- `start` (integer): Zero-based offset into the first 1,000 results.

### `page_employees` (~141 tokens)

List Page Employees

List the people who say they currently work at a company page, read FRESH at request time, each with name, headline, location and profile. Returns the first 1,000 people; page with `start`. Costs $0.0012 per live read. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 50.
- `page` (string, required): A company page's public name, or its page address.
- `start` (integer): Zero-based offset into the first 1,000 people.

### `lead_search` (~219 tokens)

Search Leads

Search people as sales leads by keywords and lead filters (seniority, function, company headcount, years in role, a recent job change, recent posting), read FRESH at request time. Each lead carries name, location, current role with tenure, network distance and signals. Returns the first 2,500 results per query; page with `start`. Costs $0.0035 per result returned; an empty search is free. Give `keywords` or at least one filter. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 25.
- `filters` (object): Named filters: titles as text; companies, places, industries, functions and schools as numeric ids; the rest as listed bands; changed_jobs_recently and posted_recently take true.
- `keywords` (string): Free-text keywords.
- `start` (integer): Zero-based offset into the first 2,500 results.

### `lead_company_search` (~203 tokens)

Search Lead Companies

Search companies as sales accounts by keywords and account filters (headcount, headcount growth, annual revenue, industry, location, hiring now), read FRESH at request time. Returns the first 2,500 results per query; page with `start`. Costs $0.0035 per result returned; an empty search is free. Give `keywords` or at least one filter. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `count` (integer): Results per page, 1 to 25.
- `filters` (object): Named filters: industry and location as numeric ids, headcount as bands, headcount_growth as { min, max } percent, annual_revenue as { min, max } USD millions, hiring true.
- `keywords` (string): Free-text keywords.
- `start` (integer): Zero-based offset into the first 2,500 results.

### `account_connect` (~177 tokens)

Connect Your Account

Connect YOUR OWN account with its signed-in session string, so the write tools and page_followers act as you. The session is checked live once, stored encrypted, never returned and deleted on account_disconnect; it replaces any account connected before. Free. A session string is a credential: pass it only when the user gives it. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `proxy_url` (string): Optional: your own http, https or socks5 proxy for this account.
- `session` (string, required): The account's signed-in session string.
- `user_agent` (string): Optional: the browser user agent the session was created with.

### `account_login` (~355 tokens)

Connect Your Account by Signing In

Connect YOUR OWN account by signing in with its email or phone and password. When the account asks for a two-factor code, an emailed code or a check a person must finish, the answer carries a `challenge_id` (and a `handoff_url` for a check): call again with `code` and `challenge_id` within 15 minutes. With `totp_secret` (the authenticator setup key) the two-factor code is typed for you; `remember: true` keeps the details encrypted so a later sign-out is signed back in automatically. Free. A password is a credential: pass it only when the user gives it. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `challenge_id` (string): The challenge_id from the previous answer.
- `code` (string): The two-factor or emailed code, on a resumed sign-in.
- `identifier` (string, required): The account's sign-in email or phone.
- `password` (string, required): The account's password; kept encrypted only when remember is true.
- `proxy_url` (string): Optional: your own http, https or socks5 proxy for this account.
- `remember` (boolean): Optional opt-in: keep the sign-in details encrypted for automatic re-login after a sign-out. Deleted on disconnect.
- `totp_secret` (string): Optional: the authenticator app's setup key (base32), so the two-factor code is typed for you.
- `user_agent` (string): Optional: the browser user agent to sign in with.

### `account_status` (~80 tokens)

Get Connected Account

What is connected: `connected`, `status` (active, or dead when it signed out and needs connecting again), the account's handle and name, and its dates. Never returns the session. Free. Check it before a batch of writes.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.

### `account_disconnect` (~52 tokens)

Disconnect Your Account

Disconnect your account: its stored session is deleted. Safe to repeat; works at a zero balance. Free.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.

### `accounts_list` (~59 tokens)

List Connected Accounts

Every account connected to this API key, oldest first: account_id, status (active, connecting, or dead when it needs connecting again), handle, name, egress and dates. Never returns a session. No cap on accounts per key. Free.

### `account_add` (~290 tokens)

Connect Another Account

Connect ANOTHER of your own accounts to this key, alongside the ones already connected, and get its account_id. Send either `session` (a signed-in session string) or `identifier` and `password` (a sign-in). When the sign-in asks for a code or a check, the answer carries account_id and challenge_id: finish it with account_checkpoint. Refused with account_already_connected (and that account's account_id) when the same account is already here. Free. Session strings and passwords are credentials: pass them only when the user gives them. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `identifier` (string): The account's sign-in email or phone.
- `password` (string): The account's password.
- `proxy_url` (string): Optional: your own http, https or socks5 proxy for this account.
- `remember` (boolean): Optional opt-in: keep the sign-in details encrypted for automatic re-login.
- `session` (string): The account's signed-in session string (or sign in with identifier and password).
- `totp_secret` (string): Optional: the authenticator setup key (base32), so the two-factor code is typed for you.
- `user_agent` (string): Optional: the browser user agent of the session or sign-in.

### `account_get` (~48 tokens)

Get One Connected Account

One connected account by its account_id: status, handle, name, egress and dates. Never returns a session. Free.

Input parameters:

- `account_id` (string, required): The account_id from accounts_list.

### `account_remove` (~47 tokens)

Remove a Connected Account

Remove one connected account: its stored session, its browser profile and its queued writes are deleted. Other accounts are untouched. Free.

Input parameters:

- `account_id` (string, required): The account_id to remove.

### `account_reconnect` (~156 tokens)

Reconnect an Account

Connect the same account again after it signed out, keeping its account_id: send `session`, or `identifier` and `password`. Free. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string, required): The account_id to reconnect.
- `identifier` (string): The account's sign-in email or phone.
- `password` (string): The account's password.
- `remember` (boolean): Optional opt-in: keep the sign-in details encrypted for automatic re-login.
- `session` (string): A fresh signed-in session string.
- `totp_secret` (string): Optional: the authenticator setup key (base32).

### `account_checkpoint` (~154 tokens)

Finish an Account's Sign-in Check

Finish a sign-in that asked for a code or a check: send the challenge_id from the earlier answer, the code when one was asked for, and the same identifier and password. Within 15 minutes. Free. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string, required): The account_id the sign-in answered with.
- `challenge_id` (string, required): The challenge_id from the earlier answer.
- `code` (string): The two-factor or emailed code, when one was asked for.
- `identifier` (string, required): The account's sign-in email or phone.
- `password` (string, required): The account's password.

### `account_connect_link` (~338 tokens)

Create a Hosted Connect Link

A short-lived, single-use link on our site where YOUR end user connects their own account (a sign-in, with any code or check it asks for, or a session string), so you never handle their password. type create (default) connects a new account; type reconnect with account_id reconnects that one and keeps its account_id. Optional: name (your own reference, passed back in the redirect and every event), expires_on (5 minutes to 24 hours, default 1 hour), success_redirect_url and failure_redirect_url (https; status, account_id, name and reason are added to the query), notify_url (https; receives account.connected, account.reconnect_required and account.disconnected for that account, signed with the webhook_secret this answer shows once). Free. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): For type reconnect: the account_id to reconnect.
- `expires_on` (string): ISO 8601 date and time, 5 minutes to 24 hours from now. Default 1 hour.
- `failure_redirect_url` (string): https URL the end user is sent to when the link cannot succeed.
- `name` (string): Your own reference for the account, such as your user id.
- `notify_url` (string): https URL that receives this account's signed events.
- `success_redirect_url` (string): https URL the end user is sent to once connected.
- `type` (string): create (default) for a new account, reconnect for an existing one.

### `account_connect_link_revoke` (~47 tokens)

Revoke a Hosted Connect Link

Revoke a hosted connect link before it is used, so it can no longer connect anything. Free.

Input parameters:

- `link_id` (string, required): The link_id from account_connect_link.

### `message_send` (~297 tokens)

Send Direct Message

Send a direct message from YOUR connected account. Costs $0.005 per action, drawn from your balance; billing turns on with the write go-live switch (free until then). Requires a connected account (account_connect). Optional: one attachment (an https url we fetch, or base64 data with filename and mime_type; at most 20 MB; PDF, Word, PowerPoint, Excel, plain text, JPEG, PNG or GIF), and inmail: true with a subject to message someone outside your network (one credit each; 409 no_inmail_credits when none is left, nothing sent). An attachment or inmail send answers 503 temporarily_unavailable, with nothing charged, until it is switched on. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `attachment`: One file, at most 20 MB: { url } (https) or { data (base64), filename, mime_type }.
- `inmail` (boolean): true to message a person outside your network; needs subject.
- `person_ref` (string, required): The person reference from a profile or search result.
- `subject` (string): The subject line, with inmail: true only.
- `text` (string, required): The message text.

### `person_invite` (~96 tokens)

Send Connection Invite

Send a connection invite from your connected account. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `person_ref` (string, required): The person reference from a profile or search result.

### `writes_queued` (~67 tokens)

List Queued Writes

List the writes that were sent while your connected account was signed out. Each is queued and sent automatically once the account is connected again. Free.

Input parameters:

- `limit` (integer): How many to return, 1 to 100.
- `status` (string): Only writes in this state.

### `write_queued_cancel` (~44 tokens)

Cancel a Queued Write

Cancel a write that is still queued, so it is never sent. Free.

Input parameters:

- `id` (string, required): The queued_id from the 202 answer or the list.

### `invite_withdraw` (~93 tokens)

Withdraw Connection Invite

Withdraw a connection invite you sent. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `person_ref` (string, required): The person reference the invite was sent to.

### `person_follow` (~115 tokens)

Follow or Unfollow a Person

Follow a person, or unfollow with `unfollow: true`. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `person_ref` (string, required): The person reference from a profile or search result.
- `unfollow` (boolean): true to unfollow instead of follow.

### `person_visit` (~124 tokens)

Visit a Profile

Visit a profile from your connected account (the 'viewed you' signal). Costs $0.005 per action. Give person_ref or profile_ref. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `person_ref` (string): The person reference from a profile or search result.
- `profile_ref` (string): A person's public identifier or profile address.

### `post_create` (~207 tokens)

Create a Post

Create a post (share) from your connected account, optionally with media: up to 20 images (JPEG, PNG or GIF, 5 MB each), one MP4 video (50 MB) or one PDF document (25 MB), 50 MB in all. Give each file as a public https `url`, or inline as base64 `data` with its `filename` and `mime` (inline files share a 20 MB request). Text is optional with media. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `media` (object): Media to attach.
- `text` (string): The post text; required unless media is given.
- `visibility` (string): Who can see it; defaults to anyone.

### `post_react` (~157 tokens)

React to a Post

React to a post, or remove your reaction with `remove: true`. Costs $0.005 per action. Give one of post_id, share_id or post_url. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `post_id` (string): The post id.
- `post_url` (string): The public post URL.
- `reaction` (string): The reaction; defaults to like.
- `remove` (boolean): true to remove your reaction instead.
- `share_id` (string): The share id.

### `post_comment` (~169 tokens)

Comment on a Post

Comment on a post, or reply to a comment with `parent_comment`. Costs $0.005 per action. Give one of post_id, share_id or post_url. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `parent_comment` (string): The comment_id of a comment on this post (from post_engagers kind=comments) to reply under.
- `post_id` (string): The post id.
- `post_url` (string): The public post URL.
- `share_id` (string): The share id.
- `text` (string, required): The comment text.

### `post_repost` (~127 tokens)

Repost a Post

Repost a post (instant repost, no commentary). Costs $0.005 per action. Give one of post_id, share_id or post_url. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `post_id` (string): The post id.
- `post_url` (string): The public post URL.
- `share_id` (string): The share id.

### `post_quote` (~152 tokens)

Quote a Post

Quote a post with your own thoughts (repost with commentary). Costs $0.005 per action. Give one of post_id, share_id or post_url. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `post_id` (string): The post id.
- `post_url` (string): The public post URL.
- `share_id` (string): The share id.
- `text` (string, required): Your commentary.
- `visibility` (string): Who can see it; defaults to anyone.

### `post_edit` (~136 tokens)

Edit Your Post

Edit the text of one of your own posts. Costs $0.005 per action. Give share_id or a post_url that names the post. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `post_id` (string): The post id.
- `post_url` (string): The public post URL.
- `share_id` (string): The share id.
- `text` (string, required): The new post text.

### `post_delete` (~122 tokens)

Delete Your Post

Delete one of your own posts. Costs $0.005 per action. Give share_id or a post_url that names the post. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `post_id` (string): The post id.
- `post_url` (string): The public post URL.
- `share_id` (string): The share id.

### `comment_delete` (~103 tokens)

Delete Your Comment

Delete one of your own comments. Costs $0.005 per action. Pass the comment_id from post_engagers (kind=comments). Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `comment_id` (string, required): The comment_id of your comment.

### `person_endorse` (~121 tokens)

Endorse a Skill

Endorse one of a person's listed skills, named as person_skills lists it. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `person_ref` (string, required): The person reference from a profile or search result.
- `skill` (string, required): The skill name, as person_skills lists it.

### `person_skills` (~104 tokens)

Read a Person's Skills

Read a person's listed skills with their endorsement counts, and whether you endorsed each. Costs $0.0012 per read. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `person_ref` (string, required): The person reference from a profile or search result.

### `insights_profile_views` (~96 tokens)

Who Viewed Your Profile

Who viewed your connected account's profile, where the network shows them (a hidden viewer is anonymous), plus the view count. Costs $0.0012 per read. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.

### `insights_ssi` (~104 tokens)

Your Social Selling Index

Your connected account's social selling index (0 to 100) and its four parts (0 to 25 each), with your rank in your industry and network. Costs $0.0012 per read. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.

### `insights_posts` (~120 tokens)

Your Post Insights

Your connected account's recent posts with impressions, reactions, comments and reposts. Costs $0.0012 per read. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `count` (integer): Posts per page, 1 to 50.
- `start` (integer): Offset into your posts, 0 to 1000.

### `messages_list` (~149 tokens)

List Conversations

Read your connected account's recent conversations, incremental by `since`/`cursor`. Costs $0.0012 per read; billing turns on with the messaging go-live switch (free until then). Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `count` (integer): Conversations per page, 1 to 20.
- `cursor` (string): Opaque cursor from the previous page.
- `since` (string): Read only what changed after this value from a previous read.

### `message_thread` (~159 tokens)

Read a Conversation Thread

Read the messages of one conversation thread, incremental by `since`/`cursor`. Costs $0.0012 per read. Pass the `thread_id` from messages_list. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `count` (integer): Messages per page, 1 to 50.
- `cursor` (string): Opaque cursor from the previous page.
- `since` (string): Read only what changed after this value from a previous read.
- `thread_id` (string, required): The thread id from messages_list.

### `connections_list` (~157 tokens)

List Your Connections

Read your connected account's first-degree connections, newest first, each with name, headline, profile_ref, person_ref and connected_at. Costs $0.0012 per read. Page with `start` or the `cursor` of the previous page. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `count` (integer): Connections per page, 1 to 40.
- `cursor` (string): Opaque cursor from the previous page.
- `start` (integer): 0-based position of the first connection.

### `invitations_received` (~139 tokens)

List Received Invitations

Read the connection invitations waiting on your connected account, each with an invitation_id, the sender as a person, the optional message and sent_at. Costs $0.0012 per read. Answer one with invitation_accept or invitation_decline. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `count` (integer): Invitations per page, 1 to 20.
- `cursor` (string): Opaque cursor from the previous page.

### `invitations_sent` (~132 tokens)

List Sent Invitations

Read the connection invitations your connected account sent, each with status (pending, or accepted or withdrawn where known), the invitee as a person and sent_at. Costs $0.0012 per read. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `count` (integer): Invitations per page, 1 to 20.
- `cursor` (string): Opaque cursor from the previous page.

### `invitation_accept` (~92 tokens)

Accept an Invitation

Accept a connection invitation your connected account received. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `invitation_id` (string, required): The invitation_id from invitations_received.

### `invitation_decline` (~94 tokens)

Decline an Invitation

Decline a connection invitation your connected account received. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `invitation_id` (string, required): The invitation_id from invitations_received.

### `connection_remove` (~100 tokens)

Remove a Connection

Remove a first-degree connection from your connected account. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `person_ref` (string, required): The person reference from connections_list, a profile or a search result.

### `chat_start` (~206 tokens)

Start a Conversation

Start a new conversation from your connected account with one person, or a group of up to 50 (subject is the group's title). Answers the new thread_id for message_thread (null when it could not be read back; find it in messages_list). Optional attachment as on message_send. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `attachment`: One file, at most 20 MB: { url } (https) or { data (base64), filename, mime_type }.
- `person_refs` (array, required): 1 to 50 person references from a profile or search result.
- `subject` (string): The group's title; needs two or more people.
- `text` (string, required): The first message.

### `message_react` (~154 tokens)

React to a Message

React to one message in a thread with an emoji, or remove: true to take the reaction back. Pass the thread_id and message_id from message_thread. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `emoji` (string, required): One emoji.
- `message_id` (string, required): The message id from message_thread.
- `remove` (boolean): true removes your reaction instead.
- `thread_id` (string, required): The thread id from messages_list or message_thread.

### `thread_mark_read` (~94 tokens)

Mark a Thread Read

Mark a conversation thread read on your connected account. Costs $0.005 per action. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.
- `thread_id` (string, required): The thread id from messages_list.

### `inmail_credits` (~82 tokens)

Get Message Credits

Your connected account's remaining credits for messages to people outside its network (credits_remaining). Free. Requires a connected account. While GET /pricing does not list this route in its family's available_routes it answers 503 temporarily_unavailable and nothing is charged.

Input parameters:

- `account_id` (string): Which connected account (accounts_list). Optional while this key has exactly one.

### `account_balance` (~35 tokens)

Get Account Balance

Your credit balance and the prices you pay (record, research, email verification). Free. Check it before a large paged search.

### `feedback_send` (~358 tokens)

Send Feedback

Report a bug, a wrong or empty field, a missing capability or a question about ProspectAPIs to the team. A report is first drafted to a queue (action "draft", the default), which sends nothing; action "list" shows the pending drafts with their ids; action "send" posts only the drafts named in `ids` to POST /v1/feedback and returns a feedback_id per report; action "discard" drops the drafts named in `ids`. Free; limited to 10 delivered reports an hour per account (a 429 keeps the draft queued: wait, do not retry in a loop). Before reporting that a field is wrong or a parameter is ignored, re-run the call with a value that could only match if it were honoured. Put the exact call, what came back and what you expected in `details`; never include secrets or API keys.

Input parameters:

- `action` (string): "draft" (default) queues a report and sends nothing. "list" shows the pending drafts with their ids. "send" posts the drafts named in `ids`. "discard" drops the drafts named in `ids`.
- `details` (string): Required for a draft. The exact call, what came back, what you expected, and ids such as research_id.
- `ids` (array): For "send" or "discard": the draft ids to act on, exactly as action "list" shows them.
- `kind` (string): For a draft: bug (default), feature or question.
- `title` (string): Required for a draft. One line: what is wrong or missing.
- `tool` (string): For a draft: the tool the report is about, such as research_get.

### `feedback_list` (~117 tokens)

List Feedback

The reports this account sent with feedback_send (from any of its keys), newest first, each with its status (received, triaged, fixed, wont_fix, needs_info), the team's response and responded_at. Free. Use it to check whether a reported bug was fixed before reporting it again. Page with `cursor` from the previous `next_cursor`.

Input parameters:

- `cursor` (string): The previous page's next_cursor, passed back unchanged.
- `limit` (integer): Reports per page, 1 to 100 (default 25).

### `feedback_get` (~69 tokens)

Get Feedback

One report this account sent, by the feedback_id feedback_send returned: its status (received, triaged, fixed, wont_fix, needs_info), the team's response and responded_at. Free. A report from another account answers 404.

Input parameters:

- `id` (string, required): The feedback_id feedback_send returned.

### `pricing_get` (~78 tokens)

Get Pricing

The live price list: the balance a new account starts with, funding records (price per record), research (whether it is available and its price per brief), email verification (price per check, which statuses are charged and which are free) and watchlist deliveries. Free, needs no key. Use it to quote a cost before a large call.

### `api_version` (~22 tokens)

Get API Version

The API's version and deployed build. Free, needs no key.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/prospectapis-mcp#diagnostics

## Score history

- 2026-11-05: 64
- 2026-11-04: 49
- 2026-11-03: 49
- 2026-11-02: 49
- 2026-11-01: 74
- 2026-10-31: 74
- 2026-10-30: 63
- 2026-10-29: 71
- 2026-10-28: 71
- 2026-10-27: 71
- 2026-10-26: 56

## Common questions

### What is the ProspectAPIs MCP server?

ProspectAPIs is an MCP server listed in the public MCP registry as com.prospectapis/prospectapis-mcp. Funding rounds, LinkedIn data and actions, email verification and cited research briefs. This page covers its npm package (prospectapis-mcp).

### Is the ProspectAPIs MCP server safe to use?

ProspectAPIs scores 64 out of 100 on VerifyMCP. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the ProspectAPIs MCP server expose?

ProspectAPIs exposes 99 tools: funding_search, funding_get, launch_search, launch_get, company_get, and 94 more. Their descriptions and schemas cost roughly 16,262 tokens of context every time the server is loaded.

### Is the ProspectAPIs MCP server still maintained?

ProspectAPIs is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the ProspectAPIs MCP server under?

ProspectAPIs declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the ProspectAPIs MCP server?

VerifyMCP ran 14 checks on ProspectAPIs, covering Malware scan, Install scripts, Source repository, Provenance and 10 more. 2 items could not be completed, a gap on our side rather than a finding about ProspectAPIs: Known CVEs and Dependency health. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/prospectapis-mcp
- Socket report: https://socket.dev/npm/package/prospectapis-mcp
- Repository: https://github.com/ProspectAPIs/prospectapis-mcp
- Website: https://prospectapis.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/prospectapis-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/prospectapis-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/prospectapis-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-prospectapis-prospectapis-mcp/prospectapis-mcp
