Contact Enrich
Enrich a KNOWN person: return their email, phone, seniority/title, social profiles, and employment history. Sourced from EXTERNAL contact providers — Apollo and ZoomInfo — NOT the HG Insights data API. Requires an Apollo or ZoomInfo integration; provider is auto-selected from org configuration unless you set provider. Use this when you already have a specific contact and want their missing details — pass a contactId from contact_search (most accurate), an email, a LinkedIn URL, or a first+last name with company domain/name. Batch up to 25 people via contacts for bulk enrichment. Do NOT use this to DISCOVER people you don't know yet (e.g. "find the VPs of Marketing at Cisco") — use contact_search for that, then enrich the best matches by id. USES CREDITS, billed per revealed detail on matched contacts (not per person): 0.2 credits per revealed email + 2 credits per revealed phone. revealPhone is OPT-IN (defaults false) because a phone reveal costs 10x an email — only set it when a phone number is specifically required. No-match calls, and calls revealing neither detail, cost 0. Response metadata.dynamicCreditCost reports the actual charge. Do NOT re-enrich a contact already in context — every call is billed regardless of whether the data changed.
Credits
0.2 / 2 — 0.2 per email reveal, 2 per phone reveal (phone is opt-in). See the full credit table for how AI Credits work.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
contactId | string | - | Provider contact ID returned by contact_search. Most accurate identifier — resolves an exact person with no matching ambiguity. Use the same provider that produced it. |
firstName | string | - | Contact's first (given) name. Combine with lastName and a company domain/name so the provider can resolve the right person. |
lastName | string | - | Contact's last (family) name. Combine with firstName and a company domain/name so the provider can resolve the right person. |
email | string | - | Contact's work or personal email, if known. A strong standalone matcher — sufficient on its own to reverse-lookup the rest of the profile. |
companyDomain | string | - | Current employer's website domain (e.g. 'stripe.com'). Pair with firstName+lastName to disambiguate common names; preferred over companyName. Protocol prefixes (http://, https://), leading www., and trailing paths/queries/fragments are accepted and stripped automatically; case is normalized. |
companyName | string | - | Current employer's name (e.g. 'Stripe'). Use only when the domain is unknown — companyDomain resolves more reliably. |
linkedinUrl | string | - | Contact's LinkedIn profile URL. A strong standalone matcher — sufficient on its own to identify the person. |
contacts | array | - | Array of known contacts to enrich in one call (max 25), each identified the same ways as a single enrichment (id, email, linkedinUrl, or name + company). Cheaper and faster than one call per person; mutually exclusive with the single-contact fields above. |
contacts[].id | string | - | Provider contact ID (from contact_search) for this row. Most accurate matcher for a bulk item. |
contacts[].firstName | string | - | Contact's first (given) name; pair with lastName and a company domain/name. |
contacts[].lastName | string | - | Contact's last (family) name; pair with firstName and a company domain/name. |
contacts[].email | string | - | Contact's email, if known — a strong standalone matcher for this row. |
contacts[].companyDomain | string | - | This contact's current employer domain (e.g. 'salesforce.com'); preferred over companyName. Protocol prefixes (http://, https://), leading www., and trailing paths/queries/fragments are accepted and stripped automatically; case is normalized. |
contacts[].companyName | string | - | This contact's current employer name; use only when the domain is unknown. |
contacts[].linkedinUrl | string | - | Contact's LinkedIn profile URL — a strong standalone matcher for this row. |
revealEmail | boolean | true | Whether to reveal email addresses (default: true). Billed at 0.2 credits per contact with a revealed email. |
revealPhone | boolean | false | Whether to reveal phone numbers. OPT-IN and billed separately at 2 credits per contact with a revealed phone — 10x the cost of an email reveal. Defaults to false; only set true when a phone number is specifically required. |
provider | string | auto | External contact provider to enrich against. "auto" (default) picks the first configured provider; "apollo" or "zoominfo" force a specific one. Use the same provider that produced any contactId you pass. |
Required Integrations
This tool is only available when your organization has the following integrations configured in the Phoenix Integrations settings:
- Apollo.io (
apollo) - ZoomInfo (
zoominfo)
Use Cases
- I have a contactId from contact_search — get this person's email and phone
- Enrich a known person by first+last name plus their company domain (e.g. Jane Doe at cisco.com)
- Reverse-lookup a person from just their email address to fill in title, company, and LinkedIn
- Enrich a batch of up to 25 known contacts in one call instead of enriching one at a time
- Get a mobile phone number for a specific contact (set revealPhone: true — 10x the email cost)
Example Usage
Enrich by contactId from contact_search (most accurate)
{
"tool": "contact_enrich",
"arguments": {
"contactId": "60a1b2c3d4e5f6a7b8c9d0e1"
}
}
Enrich by name + company domain, email only
{
"tool": "contact_enrich",
"arguments": {
"firstName": "Jane",
"lastName": "Doe",
"companyDomain": "cisco.com"
}
}
Reverse-lookup by email, include phone
{
"tool": "contact_enrich",
"arguments": {
"email": "jane.doe@cisco.com",
"revealPhone": true
}
}
Response Format
| Field | Type | Description |
|---|---|---|
contact | object | Enriched contact data (single enrichment) |
contact.id | string | Contact ID |
contact.firstName | string | null | First name |
contact.lastName | string | null | Last name |
contact.name | string | null | Full name |
contact.title | string | null | Job title |
contact.seniority | string | null | Seniority level |
contact.email | string | null | Email address (if revealed) |
contact.emailStatus | string | null | Email verification status |
contact.personalEmails | array | null | Personal email addresses |
contact.phone | string | null | Primary phone number |
contact.mobilePhone | string | null | Mobile phone number |
contact.corporatePhone | string | null | Corporate phone number |
contact.linkedinUrl | string | null | LinkedIn profile URL |
contact.twitterUrl | string | null | Twitter/X profile URL |
contact.facebookUrl | string | null | Facebook profile URL |
contact.githubUrl | string | null | GitHub profile URL |
contact.organization | object | Organization information |
contact.organization.id | string | Organization ID |
contact.organization.name | string | Company name |
contact.organization.domain | string | null | Company domain |
contact.organization.industry | string | null | Industry |
contact.organization.employeeCount | number | null | Employee count |
contact.organization.revenue | number | null | Annual revenue |
contact.organization.location | string | null | Company location |
contact.organization.linkedinUrl | string | null | Company LinkedIn URL |
contact.organization.website | string | null | Company website |
contact.employmentHistory | array | Employment history |
contact.employmentHistory[].organizationName | string | null | |
contact.employmentHistory[].title | string | null | |
contact.employmentHistory[].startDate | string | null | |
contact.employmentHistory[].endDate | string | null | |
contact.employmentHistory[].isCurrent | boolean | |
contact.city | string | null | City |
contact.state | string | null | State/Region |
contact.country | string | null | Country |
contacts | array | Enriched contacts (bulk enrichment) |
contacts[].id | string | Contact ID |
contacts[].firstName | string | null | First name |
contacts[].lastName | string | null | Last name |
contacts[].name | string | null | Full name |
contacts[].title | string | null | Job title |
contacts[].seniority | string | null | Seniority level |
contacts[].email | string | null | Email address (if revealed) |
contacts[].emailStatus | string | null | Email verification status |
contacts[].personalEmails | array | null | Personal email addresses |
contacts[].phone | string | null | Primary phone number |
contacts[].mobilePhone | string | null | Mobile phone number |
contacts[].corporatePhone | string | null | Corporate phone number |
contacts[].linkedinUrl | string | null | LinkedIn profile URL |
contacts[].twitterUrl | string | null | Twitter/X profile URL |
contacts[].facebookUrl | string | null | Facebook profile URL |
contacts[].githubUrl | string | null | GitHub profile URL |
contacts[].organization | object | Organization information |
contacts[].organization.id | string | Organization ID |
contacts[].organization.name | string | Company name |
contacts[].organization.domain | string | null | Company domain |
contacts[].organization.industry | string | null | Industry |
contacts[].organization.employeeCount | number | null | Employee count |
contacts[].organization.revenue | number | null | Annual revenue |
contacts[].organization.location | string | null | Company location |
contacts[].organization.linkedinUrl | string | null | Company LinkedIn URL |
contacts[].organization.website | string | null | Company website |
contacts[].employmentHistory | array | Employment history |
contacts[].employmentHistory[].organizationName | string | null | |
contacts[].employmentHistory[].title | string | null | |
contacts[].employmentHistory[].startDate | string | null | |
contacts[].employmentHistory[].endDate | string | null | |
contacts[].employmentHistory[].isCurrent | boolean | |
contacts[].city | string | null | City |
contacts[].state | string | null | State/Region |
contacts[].country | string | null | Country |
metadata | object | Enrichment metadata |
metadata.creditsUsed | number | Number of credits consumed |
metadata.matchConfidence | string | Match confidence level |
metadata.enrichedAt | string | ISO timestamp of enrichment |
metadata.noMatchReason | string | Reason when no matching contact was found |
metadata.enrichmentType | string | Type of enrichment performed |
metadata.provider | string | Contact data provider used (e.g., apollo, zoominfo) |
metadata.usedProvider | string | Which provider fulfilled this request |
metadata.availableProviders | array | Providers configured for the organization |
Example response
{
"contact": {
"id": "aaaaaaaaaaaaaaaaaaaaaaaa",
"firstName": "Jordan",
"lastName": "Rivera",
"name": "Jordan Rivera",
"title": "Vice President Marketing",
"seniority": "vp",
"email": "jordan.rivera@example.com",
"emailStatus": "verified",
"mobilePhone": "+1-555-0100",
"linkedinUrl": "http://www.linkedin.com/in/example-jordan-rivera",
"organization": {
"id": "bbbbbbbbbbbbbbbbbbbbbbbb",
"name": "Salesforce",
"domain": "salesforce.com",
"industry": "computer software"
},
"city": "New York",
"state": "New York",
"country": "United States"
},
"metadata": {
"creditsUsed": 2.2,
"matchConfidence": "high",
"enrichedAt": "2026-08-27T23:03:25.231Z",
"enrichmentType": "single",
"provider": "apollo"
}
}