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/enrich-so-people-search-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: Enrich People Search API
version: '3.0'
description: Enrich (enrich.so) data enrichment API v3. Assembled verbatim from the per-endpoint OpenAPI fragments Enrich publishes on every page of https://doc.enrich.so (each documentation page embeds its own OpenAPI fragment; this document is the union of them).
contact:
name: Enrich
url: https://www.enrich.so
termsOfService: https://www.enrich.so/terms-of-service
servers:
- url: https://dev.enrich.so/api/v3
description: Enrich API v3 (base URL published at https://doc.enrich.so/api-reference-1951025m0)
security:
- ApiKeyHeader: []
tags:
- name: People Search
paths:
/people-search/employee-finder:
post:
summary: Find employees at a company
deprecated: false
description: 'Find employees at a specific company by LinkedIn URL. Optionally filter by job level, job function, country, continent, or sales region.
**Credits:** 1 credit per result returned. No charge if 0 results.
**Pagination:** Use `page` and `max_results` to paginate through results.'
operationId: employeeFinder
tags:
- People Search
parameters: []
requestBody:
content:
application/json:
schema:
type: object
required:
- company_linkedin_url
properties:
company_linkedin_url:
type: string
format: uri
description: LinkedIn company profile URL (required). Must be a valid LinkedIn company URL.
examples:
- https://www.linkedin.com/company/google/
country:
type: array
items:
type: string
maxItems: 50
description: Country names to filter (e.g. "India", "United States", "Germany")
examples:
- - United States
- United Kingdom
continent:
type: array
items:
type: string
description: Continent filter
examples:
- - North America
sales_region:
type: array
items:
type: string
description: Sales region filter
job_level:
type: array
items:
type: string
description: Job level/seniority filter
examples:
- - C-Level
- VP
- Director
job_function:
type: array
items:
type: string
description: Job function/department filter
examples:
- - Engineering
- Marketing
max_results:
type: integer
minimum: 1
maximum: 100
default: 10
description: Results per page (1-100, default 10)
page:
type: integer
minimum: 1
default: 1
description: Page number (starts at 1)
x-apidog-orders:
- company_linkedin_url
- country
- continent
- sales_region
- job_level
- job_function
- max_results
- page
x-apidog-ignore-properties: []
responses:
'200':
description: Employees found successfully. Results sorted by lead quality.
content:
application/json:
schema:
type: object
required:
- success
- data
properties:
success:
type: boolean
examples:
- true
data:
type: object
required:
- company_linkedin_url
- max_results
- results_length
- page
- total_pages
- total_results
- results
properties:
company_linkedin_url:
type: string
description: The company LinkedIn URL that was searched
max_results:
type: integer
description: Max results per page
results_length:
type: integer
description: Number of results in this page
page:
type: integer
description: Current page number
total_pages:
type: integer
description: Total pages available
total_results:
type: integer
description: Total results matching filters
results:
type: array
items:
type: object
properties:
first_name:
type: string
examples:
- John
nullable: true
last_name:
type: string
examples:
- Doe
nullable: true
full_name:
type: string
examples:
- John Doe
nullable: true
headline:
type: string
examples:
- Senior Software Engineer at Google
nullable: true
about_me:
type: string
nullable: true
location:
type: object
properties:
city:
type: string
examples:
- San Francisco
nullable: true
state_code:
type: string
examples:
- CA
nullable: true
country:
type: string
examples:
- United States
nullable: true
country_code:
type: string
examples:
- US
nullable: true
continent:
type: string
examples:
- North America
nullable: true
x-apidog-orders:
- city
- state_code
- country
- country_code
- continent
x-apidog-ignore-properties: []
linkedin_url:
type: string
examples:
- https://www.linkedin.com/in/johndoe
nullable: true
job_title:
type: string
examples:
- Senior Software Engineer
nullable: true
job_level:
type: string
examples:
- Senior
nullable: true
job_function:
type: string
examples:
- Engineering
nullable: true
job_is_current:
type: boolean
examples:
- true
education:
type: string
nullable: true
skills:
type: string
nullable: true
certifications:
type: string
nullable: true
x-apidog-orders:
- first_name
- last_name
- full_name
- headline
- about_me
- location
- linkedin_url
- job_title
- job_level
- job_function
- job_is_current
- education
- skills
- certifications
x-apidog-ignore-properties: []
x-apidog-orders:
- company_linkedin_url
- max_results
- results_length
- page
- total_pages
- total_results
- results
x-apidog-ignore-properties: []
meta:
type: object
properties:
requestId:
type: string
format: uuid
creditsUsed:
type: integer
description: Credits charged (1 per result returned, 0 if no results)
creditsRemaining:
type: integer
description: Remaining credit balance
x-apidog-orders:
- requestId
- creditsUsed
- creditsRemaining
x-apidog-ignore-properties: []
x-apidog-orders:
- success
- data
- meta
x-apidog-ignore-properties: []
headers:
X-RateLimit-Limit:
required: false
schema:
type: string
X-RateLimit-Remaining:
required: false
schema:
type: string
X-RateLimit-Reset:
required: false
schema:
type: string
x-apidog-name: ''
'400':
description: Invalid request — check that company_linkedin_url is a valid LinkedIn company URL
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
headers: {}
x-apidog-name: ''
'401':
description: Your API key is missing or invalid
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
headers: {}
x-apidog-name: ''
'402':
description: You don't have enough credits for this request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
headers: {}
x-apidog-name: ''
'429':
description: You've sent too many requests — wait and try again
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
headers:
Retry-After:
required: false
schema:
type: string
X-RateLimit-Limit:
required: false
schema:
type: string
X-RateLimit-Remaining:
required: false
schema:
type: string
X-RateLimit-Reset:
required: false
schema:
type: string
x-apidog-name: ''
'500':
description: Something went wrong on our end — try again in a moment
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
headers: {}
x-apidog-name: ''
security:
- ApiKeyHeader: []
x-apidog:
schemeGroups:
- id: 3dNu0pOytMdlp9cbPzBxt
schemeIds:
- ApiKeyHeader
- id: GLoLg2ssHZFbV6itnM7w7
schemeIds:
- BearerToken
required: true
use:
id: 3dNu0pOytMdlp9cbPzBxt
scopes:
GLoLg2ssHZFbV6itnM7w7: {}
x-apidog-folder: People Search
x-apidog-status: released
x-run-in-apidog: https://app.apidog.com/web/project/1189032/apis/api-28537860-run
/people-search/waterfall-icp-search:
post:
summary: Cascading ICP people search
deprecated: false
description: 'Search for people at a specific company using cascading ICP (Ideal Customer Profile) filter levels.
**How it works:**
1. Provide a company LinkedIn URL to target
2. Optionally define 1-10 cascade levels, each with independent ICP criteria. If omitted, a default 4-level cascade is used: CEO/Founder → C-Suite → VP → Director.
3. Levels are processed in order — results from earlier levels are excluded from later ones
4. Each candidate is scored against the ICP criteria of their matching cascade level
5. Results are returned sorted by score descending
**Scoring:** Each candidate gets a normalized 0-100 score based on title match (30pts), job level (20pts), skills overlap (15pts), location match (15pts), current job status (10pts), profile completeness (5pts), tenure (5pts), and optional seniority priority bonus (0-30pts). The score is normalized against only the dimensions specified in the cascade level.
**Credits:** 1 credit per profile returned. No charge if 0 results.'
operationId: waterfallIcpSearch
tags:
- People Search
parameters: []
requestBody:
content:
application/json:
schema:
type: object
required:
- company_linkedin_url
properties:
company_linkedin_url:
type: string
format: uri
description: Company LinkedIn URL to search employees for. Must be a valid LinkedIn company URL.
examples:
- https://www.linkedin.com/company/google/
cascade:
type: array
minItems: 1
maxItems: 10
description: 'Cascading ICP filter levels, processed in order. Results from earlier levels are excluded from later ones (deduplication by RBID_PER). If omitted, uses a default 4-level cascade: CEO/Founder → C-Suite → VP → Director.'
items:
type: object
properties:
include_title:
type: array
items:
type: string
minLength: 1
description: Job titles to include (case-insensitive exact match or headline search)
examples:
- - CTO
- VP Engineering
exclude_title:
type: array
items:
type: string
minLength: 1
description: Job titles to exclude (case-insensitive)
examples:
- - Intern
- Associate
job_levels:
type: array
items:
type: string
minLength: 1
description: Job seniority levels to filter (e.g. Owner, Founder, C-Level, Partner, VP, Director, Manager, Senior, Staff, Entry, Intern)
examples:
- - C-Level
- VP
job_functions:
type: array
items:
type: string
minLength: 1
description: Job function areas to filter (e.g. Engineering, Marketing, Sales, Technology)
examples:
- - Engineering
- Technology
skills:
type: array
items:
type: string
minLength: 1
description: Skills to match against candidate profiles (fuzzy substring matching)
examples:
- - Python
- Machine Learning
location:
type: array
items:
type: string
minLength: 1
description: 'Location codes: ISO 3166-1 alpha-2 country codes (US, UK, DE, etc.), continent codes (NORTH_AMERICA, EUROPE, ASIA, etc.), or "WORLD" for any location'
examples:
- - US
- UK
include_headline_search:
type: boolean
default: false
description: When true, also search LinkedIn headline for include_title terms (in addition to job title)
priority_bonus:
type: integer
minimum: 0
maximum: 30
default: 0
description: Seniority priority bonus (0-30). Higher = ranked above other cascade levels at equal match quality
x-apidog-orders:
- include_title
- exclude_title
- job_levels
- job_functions
- skills
- location
- include_headline_search
- priority_bonus
x-apidog-ignore-properties: []
max_results:
type: integer
minimum: 1
maximum: 100
default: 25
description: Maximum total results to return across all cascade levels
min_score:
type: number
minimum: 0
maximum: 100
default: 0
description: Minimum ICP score threshold (0-100). Candidates scoring below this are filtered out.
x-apidog-orders:
- company_linkedin_url
- cascade
- max_results
- min_score
x-apidog-ignore-properties: []
responses:
'200':
description: Search completed successfully. Results are sorted by ICP score descending.
content:
application/json:
schema:
type: object
required:
- success
- data
- meta
properties:
success:
type: boolean
examples:
- true
data:
type: object
required:
- results
- total_found
- total_returned
- cascade_stats
properties:
results:
type: array
description: Ranked list of matching candidates sorted by ICP score descending
items:
type: object
required:
- person
- current_position
- skills
- education
- certifications
- score
- ranking
- cascade_level
- ranking_factors
- what_matched
properties:
person:
type: object
description: Person identifying information
properties:
first_name:
type: string
examples:
- John
nullable: true
last_name:
type: string
examples:
- Doe
nullable: true
linkedin_url:
type: string
examples:
- https://www.linkedin.com/in/johndoe
nullable: true
linkedin_headline:
type: string
examples:
- CTO at Google
nullable: true
location:
type: string
description: Concatenation of city, state, and country
examples:
- San Francisco, California, United States
nullable: true
email_domain:
type: string
examples:
- google.com
nullable: true
x-apidog-orders:
- first_name
- last_name
- linkedin_url
- linkedin_headline
- location
- email_domain
x-apidog-ignore-properties: []
current_position:
type: object
description: Current job position details
properties:
title:
type: string
examples:
- CTO
nullable: true
company:
type: string
examples:
- Google
nullable: true
level:
type: string
examples:
- C-Level
nullable: true
function:
type: string
examples:
- Engineering
nullable: true
is_current:
type: boolean
examples:
- true
nullable: true
start_date:
type: string
description: Job start date in YYYY-MM-DD format
examples:
- '2020-01-15'
nullable: true
x-apidog-orders:
- title
- company
- level
- function
- is_current
- start_date
x-apidog-ignore-properties: []
skills:
type: array
items:
type: string
description: Parsed skills list from candidate profile
examples:
- - Python
- Machine Learning
- Cloud Architecture
education:
type: string
examples:
- Stanford University
nullable: true
certifications:
type: string
examples:
- null
nullable: true
score:
type: number
minimum: 0
maximum: 100
description: Normalized ICP score (0-100). Normalized against only the scoring dimensions that were specified in the cascade level.
examples:
- 92
ranking:
type: integer
minimum: 1
description: Rank position (1-based, sorted by score descending)
examples:
- 1
cascade_level:
type: integer
minimum: 0
description: Which cascade level matched this candidate (0-based index)
examples:
- 0
ranking_factors:
type: object
description: Breakdown of raw points awarded for each scoring dimension
properties:
title_match:
type: number
description: Points from title matching (max 30). 30=exact, 25=partial/substring, 20=headline, 10=function match
examples:
- 30
job_level:
type: number
description: Points from job level matching (max 20). 20=exact, 10=adjacent ±1, 5=near ±2
examples:
- 20
skills_overlap:
type: number
description: Points from skills overlap (max 15). Calculated as (matched/requested) * 15
examples:
- 10
location_match:
type: number
description: Points from location matching (max 15). 15=country/WORLD, 7=continent
examples:
- 15
current_job:
type: number
description: Points from current job status (max 10). 10 if JOB_IS_CURRENT_PER is true
examples:
- 10
profile_completeness:
type: number
description: 'Points from profile completeness (max 5). 1 point each for: linkedin_url, email_domain, skills, education, headline'
examples:
- 5
experience:
type: number
description: Points from job tenure (max 5). 5=>5yr, 4=>3yr, 3=>2yr, 2=>1yr, 1=≤1yr
examples:
- 5
priority_bonus:
type: number
description: Seniority priority bonus from cascade level (0-30). Higher = ranked above other cascade levels at equal match quality
examples:
- 0
x-apidog-orders:
- title_match
- job_level
- skills_overlap
- location_match
- current_job
- profile_completeness
- experience
- priority_bonus
x-apidog-ignore-properties: []
what_matched:
type: array
items:
type: string
description: Human-readable list of matching criteria for this candidate
examples:
- - 'Exact title match: CTO'
- 'Exact level: C-Level'
- 'Skills: 2/3 matched'
- 'Country match: United States'
- Current position
x-apidog-orders:
- person
- current_position
- skills
- education
- certifications
- score
- ranking
- cascade_level
- ranking_factors
- what_matched
x-apidog-ignore-properties: []
total_found:
type: integer
description: Total candidates found across all cascade levels (before min_score filtering)
examples:
- 47
total_returned:
type: integer
description: Number of results actually returned after filtering and max_results cap
examples:
- 10
cascade_stats:
type: array
description: Per-cascade-level statistics showing how many candidates were found and kept
# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/enrich-so/refs/heads/main/openapi/enrich-so-people-search-api-openapi.yml