How to Enrich a Lead from an Email Address and Retrieve Company Data Across Multiple Providers Using a Unified Enrichment API
April 10, 2026
If your product captures leads through forms, inbound requests, or outbound tools, you usually start with one piece of data: an email address.
From that single input, you often need:
- name and job title
- company and role context
- social profiles
- firmographic data (industry, size, revenue)
Each enrichment provider exposes this differently. The Unified Enrichment API standardizes that into a single request pattern.
This guide shows how to enrich a lead from an email address, then retrieve company data using the returned domain.
Use case: email → person → company → unified lead profile
Build an enrichment flow that:
- accepts an email address
- retrieves enriched person data
- extracts
company_domain - retrieves enriched company data
- merges both into a single lead profile
Core objects
| Object | Purpose |
|---|---|
| Person | identity, role, contact, social profiles |
| Company | firmographics, domain, brand, industry |
Step 1: Retrieve person enrichment by email
The person endpoint supports multiple identifiers, but email is the most reliable input.
const person = await sdk.enrich.getByEmail('jane@acme.com');
Supported query inputs
email(primary)twitternamelinkedin_urlcompany_name(not valid by itself)
Key fields returned
Identity:
namefirst_namelast_name
Role and organization:
titlecompanycompany_domain
Contact:
emailstelephones
Social:
linkedin_urltwitter_urlgithub_url
Context:
addresstimezonework_histories
This step transforms a single email into a structured person profile.
Step 2: Extract the company domain
The person response includes:
const domain = person.company_domain;
This field is the bridge between person and company enrichment.
Important:
- not all responses include
company_domain - some emails will not resolve to a company
Always check before proceeding.
Step 3: Retrieve company enrichment by domain
If a domain is available, retrieve company data.
let company = null;
if (domain) {
company = await sdk.enrich.getByDomain(domain);
}
Supported query inputs
domain(preferred)name
Key fields returned
Company identity:
namedescriptiondomain
Firmographics:
industryemployeesrevenueyear_founded
Presence:
linkedin_urlcrunchbase_urltwitter_urllogo_url
Structure:
addresstelephones
This step adds company-level context to the lead.
Step 4: Merge into a unified lead profile
Combine person and company into a single object.
const enrichedLead = {
email: person.emails?.[0]?.email,
name: person.name,
first_name: person.first_name,
last_name: person.last_name,
title: person.title,
company: person.company,
company_domain: person.company_domain,
phones: person.telephones,
socials: {
linkedin: person.linkedin_url,
twitter: person.twitter_url,
github: person.github_url,
},
company_profile: company
? {
name: company.name,
domain: company.domain,
industry: company.industry,
employees: company.employees,
revenue: company.revenue,
year_founded: company.year_founded,
linkedin: company.linkedin_url,
crunchbase: company.crunchbase_url,
logo: company.logo_url,
}
: null,
};
This creates a complete lead profile from a single input.
End-to-end example
const email = 'jane@acme.com';
// Step 1: enrich person
const person = await sdk.enrich.getByEmail(email);
// Step 2: extract domain
const domain = person.company_domain;
// Step 3: enrich company (if available)
let company = null;
if (domain) {
company = await sdk.enrich.getByDomain(domain);
}
// Step 4: merge
const enrichedLead = {
email,
name: person.name,
title: person.title,
company: person.company,
company_domain: domain,
company_industry: company?.industry,
company_size: company?.employees,
};
Handling partial results
Not all enrichment requests return full data.
Person-only results
company_domainmay be missing- skip company enrichment
Incomplete company data
- some providers return limited firmographics
- rely on available fields only
Multiple emails or phones
- arrays may contain multiple entries
- select based on type (
WORK,MOBILE, etc.)
What this enables
Lead qualification
Use:
titleindustryemployeesrevenue
to filter and prioritize leads.
CRM enrichment
Fill missing fields in contact and account records:
- name
- company
- role
- firmographics
Sales context
Provide reps with:
- company profile
- social links
- work history
Personalization
Use enriched attributes to tailor:
- messaging
- segmentation
- outreach timing
Key takeaways
- Email is the most reliable input for person enrichment
company_domainconnects person data to company data- Company enrichment should be conditional on domain availability
- The flow is stateless: request → response, no lifecycle or webhooks
- Person enrichment is widely supported; company enrichment is available when domain data is present
- Merging both objects creates a complete lead profile from a single input
This pattern gives you consistent enrichment across providers without building separate integrations for each one.