enrich_person
Enrich contact profiles by adding email, phone, social links, and employment details using email, name+company, or LinkedIn URL.
Instructions
Enrich a person's data with email, phone, social profiles, employment info, and more. Provide either email, name+domain, or LinkedIn URL.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| No | Person's email address | ||
| first_name | No | First name (use with domain) | |
| last_name | No | Last name (use with domain) | |
| domain | No | Company domain (e.g., apollo.io) | |
| linkedin_url | No | LinkedIn profile URL | |
| reveal_personal_emails | No | Include personal email addresses |
Implementation Reference
- src/index.ts:663-704 (handler)The core execution logic for the 'enrich_person' tool. Posts to Apollo's /people/match endpoint, extracts person data, formats it into a readable text response including personal details and company info, or returns no-person message.private async enrichPerson(args: any) { const response = await this.axiosInstance.post("/people/match", args); const person = response.data.person; if (!person) { return { content: [ { type: "text", text: "No person found with the provided information.", }, ], }; } let result = `Person Enrichment Results:\n\n`; result += `Name: ${person.first_name} ${person.last_name}\n`; result += `ID: ${person.id}\n`; result += `Title: ${person.title || "N/A"}\n`; result += `Email: ${person.email || "N/A"}\n`; result += `Phone: ${person.phone_numbers?.[0]?.raw_number || "N/A"}\n`; result += `LinkedIn: ${person.linkedin_url || "N/A"}\n`; result += `Location: ${person.city ? `${person.city}, ${person.state || ""}` : "N/A"}\n`; result += `Seniority: ${person.seniority || "N/A"}\n\n`; if (person.organization) { result += `Company Information:\n`; result += ` Name: ${person.organization.name}\n`; result += ` Domain: ${person.organization.website_url || "N/A"}\n`; result += ` Industry: ${person.organization.industry || "N/A"}\n`; result += ` Employees: ${person.organization.estimated_num_employees || "N/A"}\n`; } return { content: [ { type: "text", text: result, }, ], }; }
- src/index.ts:223-255 (schema)The input schema defining parameters for 'enrich_person': email, first_name, last_name, domain, linkedin_url, reveal_personal_emails.name: "enrich_person", description: "Enrich a person's data with email, phone, social profiles, employment info, and more. Provide either email, name+domain, or LinkedIn URL.", inputSchema: { type: "object", properties: { email: { type: "string", description: "Person's email address", }, first_name: { type: "string", description: "First name (use with domain)", }, last_name: { type: "string", description: "Last name (use with domain)", }, domain: { type: "string", description: "Company domain (e.g., apollo.io)", }, linkedin_url: { type: "string", description: "LinkedIn profile URL", }, reveal_personal_emails: { type: "boolean", description: "Include personal email addresses", }, }, }, },
- src/index.ts:66-67 (registration)Tool dispatch/registration in the switch statement that routes calls to 'enrich_person' to the enrichPerson handler method.case "enrich_person": return await this.enrichPerson(args);