PeopleSearch.im Search API

The Search API from PeopleSearch.im — 1 operation(s) for search.

Business capability
Company & Contact Data AE-230.30

Operations 1

POST /api/v1/search Search people (free) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/peoplesearch-im:peoplesearch-im-search-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

peoplesearch-im-search-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PeopleSearch.im Search API
  version: 1.0.0
  description: 'The same people-search backend as PeopleSearch.im, over HTTP. Search a global professional database in plain English, reveal full profiles, and fetch verified professional emails. Pay-as-you-go: 1 credit per profile, credits refunded when a lookup finds nothing. The same tools are also available to AI agents as a Model Context Protocol (MCP) server at https://peoplesearch.im/api/mcp.'
  termsOfService: https://peoplesearch.im/legal/terms
servers:
- url: https://peoplesearch.im
security:
- bearerAuth: []
- apiKeyHeader: []
tags:
- name: Search
paths:
  /api/v1/search:
    post:
      operationId: searchPeople
      summary: Search people (free)
      description: 'Find people by exact `filters` (job titles, companies, locations, industries, schools, skills and more) or by a plain-English `query`, and get masked previews plus the true total. One of the two is required; with `filters` the query is only a label. Free; spends no credits. This is the one operation that also works with no API key, for trying the API: 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 (the response then carries `keyless`), and no paging. A key that is sent and not accepted is still a 401.'
      security:
      - {}
      - bearerAuth: []
      - apiKeyHeader: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
                  example: Heads of Marketing at Series B SaaS in New York
                filters:
                  $ref: '#/components/schemas/PeopleFilters'
                limit:
                  type: integer
                  minimum: 1
                  maximum: 25
                  default: 10
                page:
                  type: string
                  description: Next-page token from a prior response.
                drop:
                  type: array
                  items:
                    type: string
                  description: Interpreted filter fields to remove and broaden the search.
      responses:
        '200':
          description: Masked previews and the true total.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  total:
                    type: integer
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          description: Opaque id for this person, stable across searches. Not their LinkedIn URL or name.
                        token:
                          type: string
                          description: Pass to /api/v1/reveal to unlock this person.
                        maskedName:
                          type: string
                        title:
                          type: string
                        industry:
                          type: string
                          nullable: true
                        companySize:
                          type: integer
                          nullable: true
                        location:
                          type: string
                          nullable: true
                  token:
                    type: string
                    nullable: true
                    description: Next-page token.
                  balance:
                    type: integer
                    nullable: true
                  relaxed:
                    type: array
                    items:
                      type: string
                    description: Filter fields dropped automatically because the query had no exact matches, least essential first. Empty when the query matched as written.
                  broadened:
                    type: object
                    nullable: true
                    description: 'Present when nobody held the job title as asked and a broader reading of it found people: `from` is the title as asked, `to` as searched (for example Consumer Investigative Reporter -> Investigative Reporter). Tried before any filter is dropped.'
                    properties:
                      from:
                        type: array
                        items:
                          type: string
                      to:
                        type: array
                        items:
                          type: string
                  suggestEntity:
                    type: string
                    enum:
                    - company
                    description: 'Present when the words asked for companies rather than people ("software companies in Berlin"): the results are people at such companies; search companies for the companies themselves.'
                  ignored:
                    type: array
                    items:
                      type: string
                    description: Parts of `filters` that could not be applied (an unknown industry name, an unknown field), in plain words. Absent when everything applied.
                  keyless:
                    type: object
                    description: 'Present only when the search was made with no API key: what such a search includes and how many are left today.'
                    properties:
                      remaining:
                        type: integer
                        description: Keyless searches left today for this caller.
                      perDay:
                        type: integer
                      note:
                        type: string
        '401':
          description: The API key that was sent is not valid.
        '429':
          description: 'No API key was sent and no free keyless search is available right now (`keyless_limit`): this caller has used its searches for today, or the daily limit all keyless callers share is reached. Create a free key to keep searching.'
      tags:
      - Search
components:
  schemas:
    PeopleFilters:
      type: object
      description: 'Exact filters, recommended for AI agents and programs: state each part of the request instead of a sentence. Values inside one list are alternatives (OR); different fields must all match (AND). Give a few variants where people word things differently (titles: ["M&A Associate", "Investment Banking Associate"]). When filters are given, `query` is only a label and is not parsed.'
      properties:
        first_name:
          type: array
          items:
            type: string
          description: 'To find one named person: their first name, with the variants they may use, e.g. ["Timothy", "Tim"]. Use with last_name, and add companies or company_domains when known ("Anqi Dai at Memorial Sloan Kettering" finds the one person).'
        last_name:
          type: array
          items:
            type: string
          description: 'To find one named person: their last name, e.g. ["Dai"]. If the name with the employer finds nobody, the search tries the last name at the employer, then the full name anywhere.'
        job_titles:
          type: array
          items:
            type: string
          description: 'Current job titles, matched as case-insensitive substrings ("Account Executive" also finds "Senior Account Executive"). Include the variants people use: ["VP Sales", "Vice President of Sales", "Head of Sales"].'
        exclude_job_titles:
          type: array
          items:
            type: string
          description: Titles to leave out, e.g. ["Intern", "Recruiter"].
        past_job_titles:
          type: array
          items:
            type: string
          description: Titles the person held before their current job.
        companies:
          type: array
          items:
            type: string
          description: Current employers by name, e.g. ["Stripe"].
        company_domains:
          type: array
          items:
            type: string
          description: Current employers by website domain, the most exact way to name a company, e.g. ["stripe.com"].
        past_companies:
          type: array
          items:
            type: string
          description: Former employers by name, e.g. ["McKinsey"] for ex-McKinsey people.
        locations:
          type: array
          items:
            type: string
          description: 'Where the person lives or works: cities, states, countries or regions, e.g. ["Frankfurt", "Munich"], ["Germany"], ["DACH"], ["Texas"]. Use "City, Country" to tell same-named places apart ("Paris, France"). Country names are safest; ISO codes are converted.'
        industries:
          type: array
          items:
            type: string
          description: Industry of the current employer, as LinkedIn names it, e.g. ["Investment Banking"], ["Software Development"], ["Hospitals and Health Care"], ["Venture Capital and Private Equity Principals"], ["Staffing and Recruiting"]. Common older names are mapped; a name that is not an industry is reported in `ignored` and not applied.
        schools:
          type: array
          items:
            type: string
          description: Schools the person attended, matched as substrings; add the local-language name too, e.g. ["University of Mannheim", "Universität Mannheim"].
        skills:
          type: array
          items:
            type: string
          description: Skills listed on the profile, e.g. ["Python", "Kubernetes"].
        languages:
          type: array
          items:
            type: string
          description: Languages the person speaks, e.g. ["German"] or ["DE"].
        keywords:
          type: array
          items:
            type: string
          description: Words to find anywhere on the profile (headline, descriptions, past roles), for what no other field covers.
        company_keywords:
          type: array
          items:
            type: string
          description: Words the current employer's own description should contain, for a KIND of employer no industry names exactly, e.g. ["hostel"], ["coffee"] (founders of coffee roasteries), ["SEO"] (with industries ["Marketing Services"] for SEO agencies), ["community college"].
        company_size_min:
          type: integer
          minimum: 1
          description: Minimum employees at the current employer.
        company_size_max:
          type: integer
          minimum: 1
          description: Maximum employees at the current employer.
        years_experience_min:
          type: integer
          minimum: 0
          description: Minimum total years of professional experience.
        years_experience_max:
          type: integer
          minimum: 0
          description: Maximum total years of professional experience.
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: sk_sift_…
      description: A PeopleSearch.im API key, created at /developers.
    apiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: The same PeopleSearch.im API key (sk_sift_…), sent as a header.
x-mcp:
  endpoint: https://peoplesearch.im/api/mcp
  transport: streamable-http
  description: Remote MCP server exposing the same operations as agent tools. Authenticate with OAuth 2.1 (the MCP authorization spec; the server's 401 points at its protected resource metadata) or with the same API key as this REST API (Bearer token or X-API-Key header).
  authorization:
    protectedResourceMetadata: https://peoplesearch.im/.well-known/oauth-protected-resource/api/mcp
    authorizationServerMetadata: https://peoplesearch.im/.well-known/oauth-authorization-server
  tools:
  - name: people_search
    title: Search people
    credits: 0
  - name: reveal_profile
    title: Reveal a person
    credits: 1
  - name: find_people
    title: Find & unlock a batch of people
    credits: 1
  - name: fetch_email
    title: Fetch a verified work email
    credits: 1
  - name: find_work_email
    title: Find a person's work email
    credits: 2
  - name: verify_email
    title: Verify an email address
    credits: 1
  - name: find_company_emails
    title: Find a company's emails
    credits: 2
  - name: reverse_email_lookup
    title: Reverse email lookup
    credits: 13
  - name: find_linkedin_profile
    title: Find a LinkedIn profile
    credits: 2
  - name: lookup_linkedin_profile
    title: Look up a LinkedIn profile
    credits: 2
  - name: lookup_company
    title: Look up a company
    credits: 1
  - name: company_search
    title: Search companies
    credits: 0
  - name: check_credits
    title: Check credit balance
    credits: 0