Unified.to
All articles

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:

  1. accepts an email address
  2. retrieves enriched person data
  3. extracts company_domain
  4. retrieves enriched company data
  5. merges both into a single lead profile

Core objects

ObjectPurpose
Personidentity, role, contact, social profiles
Companyfirmographics, 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)
  • twitter
  • name
  • linkedin_url
  • company_name (not valid by itself)

Key fields returned

Identity:

  • name
  • first_name
  • last_name

Role and organization:

  • title
  • company
  • company_domain

Contact:

  • emails
  • telephones

Social:

  • linkedin_url
  • twitter_url
  • github_url

Context:

  • address
  • timezone
  • work_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:

  • name
  • description
  • domain

Firmographics:

  • industry
  • employees
  • revenue
  • year_founded

Presence:

  • linkedin_url
  • crunchbase_url
  • twitter_url
  • logo_url

Structure:

  • address
  • telephones

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_domain may 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:

  • title
  • industry
  • employees
  • revenue

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_domain connects 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.

Start your 30-day free trial

Book a demo

All articles