Skip to main content
Glama

search_people

Find business contacts and prospects using filters like job title, company, location, industry, and seniority to identify leads or specific individuals.

Instructions

Search for people/contacts in Apollo's database with advanced filters. Use this to find prospects, leads, or specific individuals based on criteria like job title, company, location, industry, seniority, etc.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
q_keywordsNoSearch keywords for person name or title
person_titlesNoJob titles (e.g., ["CEO", "CTO", "VP Sales"])
person_senioritiesNoSeniority levels: "senior", "manager", "director", "vp", "c_suite", "owner", "partner"
organization_idsNoFilter by specific organization IDs
organization_locationsNoLocations (e.g., ["San Francisco, CA", "New York, NY"])
organization_industry_tag_idsNoIndustry tags to filter by
person_locationsNoPerson locations
pageNoPage number (default: 1)
per_pageNoResults per page (default: 25, max: 100)

Implementation Reference

  • The main handler function that executes the 'search_people' tool. It sends a POST request to Apollo's '/mixed_people/search' endpoint with the provided arguments, processes the response, formats the search results (including pagination, names, IDs, titles, companies, locations, emails, LinkedIn URLs, and seniorities), and returns a formatted text response.
    private async searchPeople(args: any) { const response = await this.axiosInstance.post("/mixed_people/search", args); const people = response.data.people || []; const pagination = response.data.pagination || {}; let result = `Found ${pagination.total_entries || people.length} people\n`; result += `Page ${pagination.page || 1} of ${pagination.total_pages || 1}\n\n`; people.forEach((person: any, index: number) => { result += `${index + 1}. ${person.first_name} ${person.last_name}\n`; result += ` ID: ${person.id}\n`; result += ` Title: ${person.title || "N/A"}\n`; result += ` Company: ${person.organization?.name || "N/A"}\n`; result += ` Location: ${person.city ? `${person.city}, ${person.state || ""}` : "N/A"}\n`; result += ` Email: ${person.email || "N/A"}\n`; result += ` LinkedIn: ${person.linkedin_url || "N/A"}\n`; result += ` Seniority: ${person.seniority || "N/A"}\n\n`; }); return { content: [ { type: "text", text: result, }, ], }; }
  • The input schema defining the parameters for the 'search_people' tool, including search keywords, job titles, seniorities, organization filters, locations, pagination options, etc. This provides input validation and descriptions for the tool's arguments.
    inputSchema: { type: "object", properties: { q_keywords: { type: "string", description: "Search keywords for person name or title", }, person_titles: { type: "array", items: { type: "string" }, description: 'Job titles (e.g., ["CEO", "CTO", "VP Sales"])', }, person_seniorities: { type: "array", items: { type: "string" }, description: 'Seniority levels: "senior", "manager", "director", "vp", "c_suite", "owner", "partner"', }, organization_ids: { type: "array", items: { type: "string" }, description: "Filter by specific organization IDs", }, organization_locations: { type: "array", items: { type: "string" }, description: 'Locations (e.g., ["San Francisco, CA", "New York, NY"])', }, organization_industry_tag_ids: { type: "array", items: { type: "string" }, description: "Industry tags to filter by", }, person_locations: { type: "array", items: { type: "string" }, description: "Person locations", }, page: { type: "number", description: "Page number (default: 1)", }, per_page: { type: "number", description: "Results per page (default: 25, max: 100)", }, }, },
  • src/index.ts:118-170 (registration)
    The tool registration object in the getTools() method, which defines the name, description, and input schema for 'search_people'. This is returned when listing available tools via ListToolsRequestSchema.
    { name: "search_people", description: "Search for people/contacts in Apollo's database with advanced filters. Use this to find prospects, leads, or specific individuals based on criteria like job title, company, location, industry, seniority, etc.", inputSchema: { type: "object", properties: { q_keywords: { type: "string", description: "Search keywords for person name or title", }, person_titles: { type: "array", items: { type: "string" }, description: 'Job titles (e.g., ["CEO", "CTO", "VP Sales"])', }, person_seniorities: { type: "array", items: { type: "string" }, description: 'Seniority levels: "senior", "manager", "director", "vp", "c_suite", "owner", "partner"', }, organization_ids: { type: "array", items: { type: "string" }, description: "Filter by specific organization IDs", }, organization_locations: { type: "array", items: { type: "string" }, description: 'Locations (e.g., ["San Francisco, CA", "New York, NY"])', }, organization_industry_tag_ids: { type: "array", items: { type: "string" }, description: "Industry tags to filter by", }, person_locations: { type: "array", items: { type: "string" }, description: "Person locations", }, page: { type: "number", description: "Page number (default: 1)", }, per_page: { type: "number", description: "Results per page (default: 25, max: 100)", }, }, }, },
  • src/index.ts:62-63 (registration)
    The dispatcher case in the CallToolRequestSchema handler that routes calls to the 'search_people' tool to its handler function.
    case "search_people": return await this.searchPeople(args);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masridigital/apollo.io-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server