People search, LinkedIn lookup and verified work emails for AI agents. First search needs no login.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: your PeopleSearch.im API key (sk_sift_...) from https://peoplesearch.im/developers. Leave empty: searches work without an account a few times a day, and other tools sign in with OAuth.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Return the current credit balance for the API key making the request. Free and read-only. Use it before a large find_people call to confirm there are enough credits.
This tool takes no arguments.
Return the current credit balance for the API key making the request. Free and read-only. Use it before a large find_people call to confirm there are enough credits.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Search a global company database and get matching companies with industry, size, location and website. Three ways to ask: a company's website ('warmly.ai') returns that one company, the most exact way to identify one; a company's name ('Warmly') returns the companies of that name; a description in plain English ('Series B fintech companies in London with 50-200 employees') returns the companies that fit it. Searching companies is FREE and spends no credits. It also works before a PeopleSearch.im account is connected: without one it returns up to 3 companies per search, up to 10 searches a day.
| Argument | Type | Description |
|---|---|---|
| query* | string | A company's website, a company's name, or the companies you want described in plain English. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "A company's website, a company's name, or the companies you want described in plain English."
}
},
"additionalProperties": false
}Look up the verified professional (work) email for a person you have already unlocked with find_people (or reveal_profile). Pass their `id`. Spends 1 credit, refunded automatically if no email is found. The lookup is live: if it returns emailStatus 'searching', call fetch_email again with the same id (no extra charge) to collect the result once it resolves. Returns a professional address, never a personal one; not every person has a findable work email.
| Argument | Type | Description |
|---|---|---|
| profile_id* | string | The `id` of a person returned by find_people (or reveal_profile). |
{
"type": "object",
"required": [
"profile_id"
],
"properties": {
"profile_id": {
"type": "string",
"description": "The `id` of a person returned by find_people (or reveal_profile)."
}
},
"additionalProperties": false
}Given a company domain or name, return the contactable role-based email addresses discovered for that organization (such as contact@, sales@, support@), each with a confidence level. Use this for reaching a company inbox, not a specific named person (for a named person use find_people or find_linkedin_profile). Spends 2 credits, refunded if none are found.
| Argument | Type | Description |
|---|---|---|
| domain_or_company* | string | A company domain (preferred, e.g. acme.com) or company name. |
{
"type": "object",
"required": [
"domain_or_company"
],
"properties": {
"domain_or_company": {
"type": "string",
"description": "A company domain (preferred, e.g. acme.com) or company name."
}
},
"additionalProperties": false
}Find the LinkedIn profile URL for a named person. Provide their first and last name; adding the company or domain sharply improves the match. Spends 2 credits, refunded if no confident match is found.
| Argument | Type | Description |
|---|---|---|
| last_name* | string | The person's last name. |
| first_name* | string | The person's first name. |
| company_or_domain | string | Optional but recommended: the company name or domain they work at, to disambiguate common names. |
{
"type": "object",
"required": [
"first_name",
"last_name"
],
"properties": {
"last_name": {
"type": "string",
"description": "The person's last name."
},
"first_name": {
"type": "string",
"description": "The person's first name."
},
"company_or_domain": {
"type": "string",
"description": "Optional but recommended: the company name or domain they work at, to disambiguate common names."
}
},
"additionalProperties": false
}The list-building tool. Runs a people search exactly as people_search does (the same `filters` or `query`, including its automatic broadening, reported in `broadenedBy`) and unlocks up to `count` full profiles in ONE atomic charge: 1 credit per newly unlocked person, and anyone you already own is free. Pass the same filters you checked with people_search, so you pay for the people you saw. Returns each person's real name, title, company, location, LinkedIn URL and an `id`. Emails are NOT fetched here (that is a separate credit): after unlocking, call fetch_email with each person's `id` to get their verified work email. WARNING for autonomous use: this can spend up to `count` credits in a single call, so choose `count` deliberately and confirm with the user before large batches. Returns an out-of-credits error instead of overspending.
| Argument | Type | Description |
|---|---|---|
| count | integer | How many people to unlock, 1-100 (default 25). Spends up to this many credits. |
| query | string | Who you are looking for, in plain English (role, seniority, industry, company, company size, location). Parsed for you. A company's website identifies it exactly, alone or in brackets after its name ('Head of Growth at Linear (linear.app)'). Optional when `filters` is given, where it is only a label. |
| filters | object | 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. |
{
"type": "object",
"properties": {
"count": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "How many people to unlock, 1-100 (default 25). Spends up to this many credits."
},
"query": {
"type": "string",
"description": "Who you are looking for, in plain English (role, seniority, industry, company, company size, location). Parsed for you. A company's website identifies it exactly, alone or in brackets after its name ('Head of Growth at Linear (linear.app)'). Optional when `filters` is given, where it is only a label."
},
"filters": {
"type": "object",
"properties": {
"skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Skills listed on the profile, e.g. [\"Python\", \"Kubernetes\"]."
},
"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\"]."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Words to find anywhere on the profile (headline, descriptions, past roles), for what no other field covers."
},
"companies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers by name, e.g. [\"Stripe\"]. A name written with a legal form or a listing's tagline (\"Stripe, Inc.\", \"Acme Pvt Ltd - Software House\") is searched without it; for an exact company use company_domains or company_ids."
},
"languages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Languages the person speaks, e.g. [\"German\"] or [\"DE\"]."
},
"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."
},
"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."
},
"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)."
},
"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."
},
"job_titles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current job titles, matched as case-insensitive whole words (\"Account Executive\" also finds \"Senior Account Executive\"). Each is also searched in its other spellings (\"CEO\" and \"Chief Executive Officer\", \"VP Sales\" and \"Vice President of Sales\"). A bare \"President\" or \"Owner\" means the top job: Vice Presidents and Product Owners are left out unless you list such a title too. When nobody holds the titles, the same job under other titles is searched first (the company's President or Owner for \"CEO\"), reported in broadenedRole."
},
"company_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers by their LinkedIn company page, the most exact way to name a company: the page's URL or its name in the URL, e.g. [\"https://www.linkedin.com/company/google\"] or [\"google\"], or LinkedIn's numeric company id. Use it for large companies, whose website often misses them (Google's page lists a short link, Amazon's lists aboutamazon.com)."
},
"past_companies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Former employers by name, e.g. [\"McKinsey\"] for ex-McKinsey people. Some people with a company in their past work there again or still: add the same names to exclude_companies for people who have left (\"former employees of Stripe\")."
},
"company_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers by the website their LinkedIn company page lists, e.g. [\"stripe.com\"]. Exact for most companies, but some large ones list another site (Amazon's page lists aboutamazon.com, so amazon.com finds AWS staff), and a domain that hosts other organisations' pages (google.com) matches those organisations: check the company of the people returned."
},
"past_job_titles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Titles the person held before their current job."
},
"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_max": {
"type": "integer",
"minimum": 1,
"description": "Maximum employees at the current employer."
},
"company_size_min": {
"type": "integer",
"minimum": 1,
"description": "Minimum employees at the current employer."
},
"exclude_companies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers to leave out, by name, e.g. [\"Stripe\"]. Needs another field to search by: with past_companies [\"Stripe\"] it finds former Stripe employees who no longer work there (11,810 of the 14,616 with Stripe in their past, measured 2026-10-19)."
},
"exclude_job_titles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Titles to leave out, e.g. [\"Intern\", \"Recruiter\"]."
},
"years_experience_max": {
"type": "integer",
"minimum": 0,
"description": "Maximum total years of professional experience."
},
"years_experience_min": {
"type": "integer",
"minimum": 0,
"description": "Minimum total years of professional experience."
}
},
"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.",
"additionalProperties": false
}
},
"additionalProperties": false
}Find and verify the professional (work) email of a person you can name: give their first name, last name and the company they work at (its domain, such as acme.com, matches best; a company name also works). Returns the address with a confidence label (Verified or Likely) and their LinkedIn profile when it can be matched. Spends 2 credits, refunded automatically if no email is found. People who asked to be removed from PeopleSearch.im are never looked up. To find people you cannot name yet, use people_search or find_people, then fetch_email.
| Argument | Type | Description |
|---|---|---|
| last_name* | string | The person's last name. |
| first_name* | string | The person's first name. |
| company_or_domain* | string | The company they work at: its domain (best, e.g. acme.com) or its name. |
{
"type": "object",
"required": [
"first_name",
"last_name",
"company_or_domain"
],
"properties": {
"last_name": {
"type": "string",
"description": "The person's last name."
},
"first_name": {
"type": "string",
"description": "The person's first name."
},
"company_or_domain": {
"type": "string",
"description": "The company they work at: its domain (best, e.g. acme.com) or its name."
}
},
"additionalProperties": false
}Turn a LinkedIn company URL into firmographic data: industry, size, location and website. Spends 1 credit, refunded if the company cannot be retrieved.
| Argument | Type | Description |
|---|---|---|
| linkedin_company_url* | string | A LinkedIn company URL, e.g. https://linkedin.com/company/… |
{
"type": "object",
"required": [
"linkedin_company_url"
],
"properties": {
"linkedin_company_url": {
"type": "string",
"description": "A LinkedIn company URL, e.g. https://linkedin.com/company/…"
}
},
"additionalProperties": false
}Turn a LinkedIn profile URL into clean structured data: name, current role and company, and location. Spends 2 credits, refunded if the profile cannot be retrieved.
| Argument | Type | Description |
|---|---|---|
| linkedin_url* | string | A LinkedIn profile URL, e.g. https://linkedin.com/in/… |
{
"type": "object",
"required": [
"linkedin_url"
],
"properties": {
"linkedin_url": {
"type": "string",
"description": "A LinkedIn profile URL, e.g. https://linkedin.com/in/…"
}
},
"additionalProperties": false
}Search a global professional database for people and get a sample of matches plus the true total match count. Ask with `filters` (recommended: state each part exactly, for example {"job_titles": ["M&A Associate", "Investment Banking Associate"], "locations": ["Frankfurt", "Munich"], "industries": ["Investment Banking"], "schools": ["University of Mannheim"]}) or with `query`, a plain-English sentence that is parsed for you (for example 'Heads of Marketing at Series B SaaS in New York'). Results are masked previews (a masked name, role, industry, company size and location) and each one carries an opaque `token`. Searching is FREE and spends no credits: use it to check that the right people come back before you pay, and refine the filters if they do not. To look up one named person, give `first_name` and `last_name` with their company or company domain when known. For a kind of employer no industry names exactly, use `company_keywords` (words its own description contains, for example ["hostel"] or ["SEO"] with industries ["Marketing Services"]). If nothing matches exactly, the search broadens itself: a job title is read more broadly first (`broadenedRole` gives the title as asked and as searched), then the least essential filters are dropped and `broadenedBy` names them; `ignored` lists any filter that could not be applied. To get a person's real name, LinkedIn and verified email, pass their token to reveal_profile, or use find_people with the same filters to unlock a batch in one call. It also works before a PeopleSearch.im account is connected: without one it returns up to 3 previews per search, up to 10 searches a day.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many masked previews to return (1-25, default 10). This does not limit the reported total. |
| query | string | Who you are looking for, in plain English (role, seniority, industry, company, company size, location). Parsed for you. A company's website identifies it exactly, alone or in brackets after its name ('Head of Growth at Linear (linear.app)'). Optional when `filters` is given, where it is only a label. |
Unlock ONE person from a people_search result. Pass the `token` from that result. Spends 1 credit and returns the full profile: real name, current title and company, location and LinkedIn URL. Set `include_email` to true to also look up their verified professional (work) email in the same call, which spends 1 more credit that is refunded if no email is found. Revealing the same person again is free (idempotent). The email is looked up live and may take a moment: if it returns emailStatus 'searching', call reveal_profile again with the same token (no extra charge) to collect it.
| Argument | Type | Description |
|---|---|---|
| token* | string | The opaque `token` of a person returned by people_search. |
| include_email | boolean | Also fetch the person's verified professional email (a second credit, refunded if none is found). Default false. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"description": "The opaque `token` of a person returned by people_search."
},
"include_email": {
"type": "boolean",
"description": "Also fetch the person's verified professional email (a second credit, refunded if none is found). Default false."
}
},
"additionalProperties": false
}Turn a professional email address into the real person behind it and their LinkedIn profile. Best for work emails; free-mailbox addresses often have no public profile to match. Spends 13 credits (this is the single most expensive lookup), refunded automatically if no match is found.
| Argument | Type | Description |
|---|---|---|
| email* | string | The email address to identify, e.g. [email protected]. |
{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "The email address to identify, e.g. [email protected]."
}
},
"additionalProperties": false
}Check whether an email address exists and is safe to send to, before it bounces. Returns a deliverability verdict (deliverable, undeliverable, or unknown) without sending anything. Spends 1 credit, refunded if no verdict can be reached.
| Argument | Type | Description |
|---|---|---|
| email* | string | The email address to verify, e.g. [email protected]. |
{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "The email address to verify, e.g. [email protected]."
}
},
"additionalProperties": false
}| filters | object | 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. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "How many masked previews to return (1-25, default 10). This does not limit the reported total."
},
"query": {
"type": "string",
"description": "Who you are looking for, in plain English (role, seniority, industry, company, company size, location). Parsed for you. A company's website identifies it exactly, alone or in brackets after its name ('Head of Growth at Linear (linear.app)'). Optional when `filters` is given, where it is only a label."
},
"filters": {
"type": "object",
"properties": {
"skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Skills listed on the profile, e.g. [\"Python\", \"Kubernetes\"]."
},
"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\"]."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Words to find anywhere on the profile (headline, descriptions, past roles), for what no other field covers."
},
"companies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers by name, e.g. [\"Stripe\"]. A name written with a legal form or a listing's tagline (\"Stripe, Inc.\", \"Acme Pvt Ltd - Software House\") is searched without it; for an exact company use company_domains or company_ids."
},
"languages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Languages the person speaks, e.g. [\"German\"] or [\"DE\"]."
},
"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."
},
"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."
},
"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)."
},
"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."
},
"job_titles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current job titles, matched as case-insensitive whole words (\"Account Executive\" also finds \"Senior Account Executive\"). Each is also searched in its other spellings (\"CEO\" and \"Chief Executive Officer\", \"VP Sales\" and \"Vice President of Sales\"). A bare \"President\" or \"Owner\" means the top job: Vice Presidents and Product Owners are left out unless you list such a title too. When nobody holds the titles, the same job under other titles is searched first (the company's President or Owner for \"CEO\"), reported in broadenedRole."
},
"company_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers by their LinkedIn company page, the most exact way to name a company: the page's URL or its name in the URL, e.g. [\"https://www.linkedin.com/company/google\"] or [\"google\"], or LinkedIn's numeric company id. Use it for large companies, whose website often misses them (Google's page lists a short link, Amazon's lists aboutamazon.com)."
},
"past_companies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Former employers by name, e.g. [\"McKinsey\"] for ex-McKinsey people. Some people with a company in their past work there again or still: add the same names to exclude_companies for people who have left (\"former employees of Stripe\")."
},
"company_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers by the website their LinkedIn company page lists, e.g. [\"stripe.com\"]. Exact for most companies, but some large ones list another site (Amazon's page lists aboutamazon.com, so amazon.com finds AWS staff), and a domain that hosts other organisations' pages (google.com) matches those organisations: check the company of the people returned."
},
"past_job_titles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Titles the person held before their current job."
},
"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_max": {
"type": "integer",
"minimum": 1,
"description": "Maximum employees at the current employer."
},
"company_size_min": {
"type": "integer",
"minimum": 1,
"description": "Minimum employees at the current employer."
},
"exclude_companies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Current employers to leave out, by name, e.g. [\"Stripe\"]. Needs another field to search by: with past_companies [\"Stripe\"] it finds former Stripe employees who no longer work there (11,810 of the 14,616 with Stripe in their past, measured 2026-10-19)."
},
"exclude_job_titles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Titles to leave out, e.g. [\"Intern\", \"Recruiter\"]."
},
"years_experience_max": {
"type": "integer",
"minimum": 0,
"description": "Maximum total years of professional experience."
},
"years_experience_min": {
"type": "integer",
"minimum": 0,
"description": "Minimum total years of professional experience."
}
},
"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.",
"additionalProperties": false
}
},
"additionalProperties": false
}