Skip to main content

Contact Enrich

Coming soon

The v2 MCP API is in preview and not yet generally available. These pages document its tools and request/response shapes; live data access is limited to enrolled organizations until v2 is released.

Use only after contact_search (2 credits per call) has identified the person — do not use for open-ended discovery. 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 availability is org-specific (commonly Apollo only). Leave provider on 'auto' (default); naming an unconfigured provider returns a hard error, so check the response's availableProviders. 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. BULK omits unmatched contacts from the returned array entirely (no placeholder) — read metadata.matchCount and compare results by id/name, never by array position. USES CREDITS, billed per requested reveal, per MATCHED contact: 0.2 per email + 2 per phone. revealPhone defaults to TRUE, so unless you pass revealPhone:false every matched contact is billed 2.2 (10x an email reveal) — set revealPhone:false when you only need email/firmographic data. No-match calls cost 0; response metadata.dynamicCreditCost reports the actual charge. Do NOT re-enrich a contact already in context — credits are charged per call regardless of whether 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

NameTypeDefaultDescription
contactIdstring-Provider contact ID returned by contact_search — a 24-character hex string (e.g. '54a797027468696b7f8f9d42'). Most accurate identifier: resolves an exact person with no matching ambiguity. Reuse the id from search rather than constructing one, and pass the same provider that produced it.
firstNamestring-Contact's first (given) name. Combine with lastName and a company domain/name so the provider can resolve the right person.
lastNamestring-Contact's last (family) name. Combine with firstName and a company domain/name so the provider can resolve the right person.
emailstring-Contact's work or personal email, if known. A strong standalone matcher — sufficient on its own to reverse-lookup the rest of the profile.
companyDomainstring-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.
companyNamestring-Current employer's name (e.g. 'Stripe'). Use only when the domain is unknown — companyDomain resolves more reliably.
linkedinUrlstring-Contact's LinkedIn profile URL. A strong standalone matcher — sufficient on its own to identify the person.
contactsarray-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. Unmatched rows are omitted from the returned array — compare results by id/name, never by array position.
contacts[].idstring-Provider contact ID (from contact_search) for this row. Most accurate matcher for a bulk item.
contacts[].firstNamestring-Contact's first (given) name; pair with lastName and a company domain/name.
contacts[].lastNamestring-Contact's last (family) name; pair with firstName and a company domain/name.
contacts[].emailstring-Contact's email, if known — a strong standalone matcher for this row.
contacts[].companyDomainstring-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[].companyNamestring-This contact's current employer name; use only when the domain is unknown.
contacts[].linkedinUrlstring-Contact's LinkedIn profile URL — a strong standalone matcher for this row.
revealEmailbooleantrueWhether to reveal email addresses (default: true)
revealPhonebooleantrueWhether to attempt a phone reveal. Defaults to TRUE, so a default enrich call is billed the 2-credit phone fee on every matched contact (10x an email reveal), charged for the attempt whether or not a phone value is returned. Pass false when you only need email/firmographic data.
providerstringautoContact data provider. Prefer "auto" (default), which selects an available provider. "apollo" or "zoominfo" target a specific provider, but requesting one your org has not configured returns a hard error rather than falling back — check availableProviders in the response.

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 only email/firmographic data without paying the phone fee (set revealPhone: false)

Example Usage

Enrich by contactId from contact_search (most accurate)

{
"tool": "contact_enrich",
"arguments": {
"contactId": "54a797027468696b7f8f9d42"
}
}

Enrich by name + company domain, email only (skip the phone fee)

{
"tool": "contact_enrich",
"arguments": {
"firstName": "Jane",
"lastName": "Doe",
"companyDomain": "cisco.com",
"revealPhone": false
}
}

Reverse-lookup by email, include phone

{
"tool": "contact_enrich",
"arguments": {
"email": "jane.doe@cisco.com",
"revealPhone": true
}
}

Response Format

FieldTypeDescription
contactobjectEnriched contact data (single enrichment)
contact.idstringContact ID
contact.firstNamestring | nullFirst name
contact.lastNamestring | nullLast name
contact.namestring | nullFull name
contact.titlestring | nullJob title
contact.senioritystring | nullSeniority level
contact.emailstring | nullEmail address (if revealed)
contact.emailStatusstring | nullEmail verification status
contact.personalEmailsarray | nullPersonal email addresses
contact.phonestring | nullPrimary phone number
contact.mobilePhonestring | nullMobile phone number
contact.corporatePhonestring | nullCorporate phone number
contact.linkedinUrlstring | nullLinkedIn profile URL
contact.twitterUrlstring | nullTwitter/X profile URL
contact.facebookUrlstring | nullFacebook profile URL
contact.githubUrlstring | nullGitHub profile URL
contact.organizationobjectOrganization information
contact.organization.idstringOrganization ID
contact.organization.namestringCompany name
contact.organization.domainstring | nullCompany domain
contact.organization.industrystring | nullIndustry
contact.organization.employeeCountnumber | nullEmployee count
contact.organization.revenuenumber | nullAnnual revenue
contact.organization.locationstring | nullCompany location
contact.organization.linkedinUrlstring | nullCompany LinkedIn URL
contact.organization.websitestring | nullCompany website
contact.employmentHistoryarrayEmployment history
contact.employmentHistory[].organizationNamestring | null
contact.employmentHistory[].titlestring | null
contact.employmentHistory[].startDatestring | null
contact.employmentHistory[].endDatestring | null
contact.employmentHistory[].isCurrentboolean
contact.citystring | nullCity
contact.statestring | nullState/Region
contact.countrystring | nullCountry
contactsarrayEnriched contacts (bulk enrichment)
contacts[].idstringContact ID
contacts[].firstNamestring | nullFirst name
contacts[].lastNamestring | nullLast name
contacts[].namestring | nullFull name
contacts[].titlestring | nullJob title
contacts[].senioritystring | nullSeniority level
contacts[].emailstring | nullEmail address (if revealed)
contacts[].emailStatusstring | nullEmail verification status
contacts[].personalEmailsarray | nullPersonal email addresses
contacts[].phonestring | nullPrimary phone number
contacts[].mobilePhonestring | nullMobile phone number
contacts[].corporatePhonestring | nullCorporate phone number
contacts[].linkedinUrlstring | nullLinkedIn profile URL
contacts[].twitterUrlstring | nullTwitter/X profile URL
contacts[].facebookUrlstring | nullFacebook profile URL
contacts[].githubUrlstring | nullGitHub profile URL
contacts[].organizationobjectOrganization information
contacts[].organization.idstringOrganization ID
contacts[].organization.namestringCompany name
contacts[].organization.domainstring | nullCompany domain
contacts[].organization.industrystring | nullIndustry
contacts[].organization.employeeCountnumber | nullEmployee count
contacts[].organization.revenuenumber | nullAnnual revenue
contacts[].organization.locationstring | nullCompany location
contacts[].organization.linkedinUrlstring | nullCompany LinkedIn URL
contacts[].organization.websitestring | nullCompany website
contacts[].employmentHistoryarrayEmployment history
contacts[].employmentHistory[].organizationNamestring | null
contacts[].employmentHistory[].titlestring | null
contacts[].employmentHistory[].startDatestring | null
contacts[].employmentHistory[].endDatestring | null
contacts[].employmentHistory[].isCurrentboolean
contacts[].citystring | nullCity
contacts[].statestring | nullState/Region
contacts[].countrystring | nullCountry
metadataobjectEnrichment metadata
metadata.creditsUsednumberCredits consumed (equals dynamicCreditCost)
metadata.dynamicCreditCostnumberCredits actually charged (matches × 3; 0 on no-match)
metadata.matchConfidencestringMatch confidence level
metadata.enrichedAtstringISO timestamp of enrichment
metadata.noMatchReasonstringReason when no matching contact was found
metadata.enrichmentTypestringType of enrichment performed
metadata.providerstringContact data provider used (e.g., apollo, zoominfo)
metadata.usedProviderstringWhich provider fulfilled this request
metadata.availableProvidersarrayProviders configured for the organization

contact_search, company_firmographic, search_companies