Developers & AI agents

The PeopleSearch.im API & MCP server

The same people-search backend as the app, for your code and your AI agents. Call it over plain HTTP, or connect it as a Model Context Protocol server so Claude, ChatGPT, Cursor, or any agent can search people, verify emails, and fetch verified work emails, billed to the same credits: searching is free, 1 credit per profile.

MCP server REST + JSONOAuth or API key1 credit / profile
Use with AI agents

Connect it to Claude, ChatGPT, Cursor, or any MCP client

PeopleSearch.im is a remote Model Context Protocol server. Add its URL to your AI app and approve the connection when it asks: there is no key to copy. Your assistant can then search people and companies, reveal profiles, and fetch verified work emails on your behalf, spending your credits (the same balance as the API and the app).

https://peoplesearch.im/api/mcp

New to it? The MCP server overview covers what an agent can do with it and the use cases. For the bigger picture, our guide to giving AI agents access to people data covers how MCP and REST fit together, the tradeoffs, and keeping an agent's data grounded and compliant.

Claude (claude.ai, Claude Desktop, and mobile)

Open Settings, then Connectors, and choose Add custom connector. Name it PeopleSearch.im, paste the URL above, and add it. The first time Claude uses a PeopleSearch.im tool it shows a Connect button: sign in, approve, and the request continues.

ChatGPT

Turn on developer mode (Settings, then Apps, then Advanced settings), create an app with the URL above, choose OAuth as the authentication, and approve the connection when PeopleSearch.im asks.

Claude Code

claude mcp add --transport http peoplesearch https://peoplesearch.im/api/mcp

Then run /mcp inside Claude Code and authenticate PeopleSearch.im to connect your account.

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "peoplesearch": {
      "url": "https://peoplesearch.im/api/mcp"
    }
  }
}

VS Code (.vscode/mcp.json)

{
  "servers": {
    "peoplesearch": {
      "type": "http",
      "url": "https://peoplesearch.im/api/mcp"
    }
  }
}

Prefer an API key? (Windsurf, scripts, and clients without OAuth)

Clients that support MCP authorization ask you to sign in and approve on first use. If yours does not, sign in to create a key and send it as a header instead:

claude mcp add --transport http peoplesearch https://peoplesearch.im/api/mcp \
  --header "Authorization: Bearer sk_sift_..."
{
  "mcpServers": {
    "peoplesearch": {
      "serverUrl": "https://peoplesearch.im/api/mcp",
      "headers": { "Authorization": "Bearer sk_sift_..." }
    }
  }
}

For a stdio-only client, bridge it with mcp-remote (or use our open-source stdio bridge on GitHub):

{
  "mcpServers": {
    "peoplesearch": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://peoplesearch.im/api/mcp",
        "--header", "Authorization: Bearer sk_sift_..."
      ]
    }
  }
}

The tools your agent gets

  • people_searchSearch peoplefree
  • reveal_profileReveal a person1 credit
  • find_peopleFind & unlock a batch of people1 credit
  • fetch_emailFetch a verified work email1 credit
  • verify_emailVerify an email address1 credit
  • find_company_emailsFind a company's emails2 credits
  • reverse_email_lookupReverse email lookup13 credits
  • find_linkedin_profileFind a LinkedIn profile2 credits
  • lookup_linkedin_profileLook up a LinkedIn profile2 credits
  • lookup_companyLook up a company1 credit
  • company_searchSearch companiesfree
  • check_creditsCheck credit balancefree

Free tools spend no credits. Paid tools charge on a billable result and refund automatically when nothing is found. Machine-readable spec: /openapi.json.

Authentication

Use a Bearer key for the REST API

Sign in to create a key, then send it on every request:

Authorization: Bearer sk_sift_...
Endpoint

Search

POST /api/v1/search

Describe who you want in plain English. Returns a free sample of masked previews and the true total, so you can validate the match before you pay, then deliver from the same query (below). Searching is free.

curl -X POST https://peoplesearch.im/api/v1/search \
  -H "Authorization: Bearer sk_sift_..." \
  -H "Content-Type: application/json" \
  -d '{"query":"Heads of Marketing at Series B SaaS in New York","limit":10}'
{
  "ok": true,
  "total": 4213,
  "results": [
    {
      "key": "q3xV9mL2Tf0bR7aKdW1sEu",
      "token": "sealed-token-you-pass-to-reveal",
      "maskedName": "Jordan M.",
      "title": "Head of Marketing",
      "industry": "Software Development",
      "companySize": 180,
      "location": "New York, United States"
    }
  ],
  "token": "next-page-token",
  "chips": [{ "label": "Role", "value": "Head of Marketing" }],
  "parser": "ai",
  "balance": 120
}
Endpoint

Deliver (1 credit per profile)

POST /api/v1/deliver

The paid step. Pass the same query and how many profiles you want in count (default 100, up to 100 per call). Delivers the full profiles in ONE atomic charge: 1 credit each, and any you already own are free. Each profile comes back with an id for the email step below. Returns 402 when out of credits.

curl -X POST https://peoplesearch.im/api/v1/deliver \
  -H "Authorization: Bearer sk_sift_..." \
  -H "Content-Type: application/json" \
  -d '{"query":"Heads of Marketing at Series B SaaS in New York","count":100}'
{
  "ok": true,
  "charged": 100,
  "balance": 20,
  "total": 4213,
  "profiles": [
    {
      "id": "…",
      "profile": {
        "name": "Jordan Miller",
        "title": "Head of Marketing",
        "company": "Acme",
        "location": "New York, United States",
        "linkedinUrl": "https://linkedin.com/in/...",
        "email": null,
        "emailStatus": "idle"
      }
    }
  ]
}
Endpoint

Reveal a single profile (1 credit)

POST /api/v1/reveal

For one profile you already have a search token for (prefer Deliver for volume). Spends one credit and returns the full profile (without the email). Add "withEmail": true to also fetch the professional email in the same call (a second credit, refunded if none is found); the endpoint waits briefly and, if the lookup is still running, returns emailStatus:"searching" so you can re-call the same token for free to get it once resolved. Revealing the same person again is free (idempotent). Returns 402 when out of credits.

curl -X POST https://peoplesearch.im/api/v1/reveal \
  -H "Authorization: Bearer sk_sift_..." \
  -H "Content-Type: application/json" \
  -d '{"token":"<token from a search result>"}'
{
  "ok": true,
  "id": "…",
  "balance": 119,
  "profile": {
    "name": "Jordan Miller",
    "title": "Head of Marketing",
    "company": "Acme",
    "companyIndustry": "Software Development",
    "companySize": 180,
    "location": "New York, United States",
    "linkedinUrl": "https://linkedin.com/in/...",
    "email": null,
    "emailStatus": "idle"
  }
}

With withEmail (a second credit, refunded if none is found):

curl -X POST https://peoplesearch.im/api/v1/reveal \
  -H "Authorization: Bearer sk_sift_..." \
  -H "Content-Type: application/json" \
  -d '{"token":"<token>","withEmail":true}'
# profile.email: "jordan@acme.com", emailStatus: "found", emailCertainty: "very_sure"
Endpoint

Email (1 credit, refunded if none)

POST /api/v1/email

Fetch a delivered (or revealed) profile's professional email by its id. Spends one credit, refunded if no email is found. Waits briefly; if the lookup is still running it returns emailStatus:"searching" so you can re-call to poll.

curl -X POST https://peoplesearch.im/api/v1/email \
  -H "Authorization: Bearer sk_sift_..." \
  -H "Content-Type: application/json" \
  -d '{"id":"<id from a deliver or reveal response>"}'
# { "ok": true, "email": "jordan@acme.com", "emailStatus": "found", "certainty": "very_sure", "balance": 19 }
Endpoint

Credit balance

GET /api/v1/credits

curl https://peoplesearch.im/api/v1/credits \
  -H "Authorization: Bearer sk_sift_..."
# { "ok": true, "balance": 119, "creditPerReveal": 1 }

Same credits as the app

Buy credits once and use them from the dashboard or the API. Top up any time.

API & MCP server | PeopleSearch.im