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 keySearch without a key1 credit / profile

New accounts get 3 free credits. Searching is always free; you only pay for the profiles and emails you keep.

Try it now, no key needed

curl -X POST https://peoplesearch.im/api/v1/search \
  -H "Content-Type: application/json" \
  -d '{"query":"Heads of Marketing at SaaS companies in New York"}'

You get the true total and up to 3 masked previews, up to 10 searches a day. A free key returns full pages and unlocks names, LinkedIn profiles and verified work emails.

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. Searching works straight away, a few times a day. When Claude needs your account (to reveal a profile or fetch an email, or once the free searches are used) 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 when a tool needs your account. If yours does not, create a free account to get 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:

{
  "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
  • find_work_emailFind a person's work email2 credits
  • 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

Create a free account to get a key, then send it on every request:

Authorization: Bearer sk_sift_...

An X-API-Key: sk_sift_... header works too. The API answers browsers on any origin, so you can try it straight from front-end code, but a key in a web page is readable by anyone who loads it and spends your credits. For anything public, call the API from your backend, and give each app its own key so you can revoke one without the others.

Search is the one call that also answers with no key, so you can try the API first: up to 3 results per search and 10 searches a day per IP address, within a daily limit that all callers without a key share, with a keyless field in the response saying so. Past either limit it returns 429. Every other endpoint needs a key.

Endpoint

Search

POST /api/v1/search

Describe who you want in plain English, or pass exact filters (job titles, companies, domains, locations, industries, schools, skills, languages, company size, years of experience). 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 or filters (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}'

Filters are matched as given, nothing is re-interpreted, so programs and AI agents should prefer them. Values in one list are alternatives, different fields must all match. Titles, companies and schools match as substrings; places are matched in every spelling profiles use (Germany also finds Deutschland); industries use LinkedIn's names. Anything that could not be applied comes back in ignored. The full schema is PeopleFilters in openapi.json.

curl -X POST https://peoplesearch.im/api/v1/search \
  -H "Authorization: Bearer sk_sift_..." \
  -H "Content-Type: application/json" \
  -d '{"filters":{"job_titles":["M&A Associate","Investment Banking Associate"],
               "locations":["Frankfurt","Munich"],
               "industries":["Investment Banking"],
               "company_size_min":50}}'
{
  "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 or filters 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 }
No code

Use it in Zapier

Four steps for any Zap, on the same credits as the API

Find a person's work email from their name and company when a row lands in a sheet, verify an address before it enters your CRM, or pull people by job title, company, industry and location into your pipeline. The integration is in beta: open the invite, then choose PeopleSearch.im in a Zap and connect it with an API key from this page.

Find Work EmailVerify Email AddressFind PeopleGet Work Email

Same credits as the app

New accounts get 3 free credits. After that, buy credits once and use them from the dashboard or the API. Top up any time.