Multi-Source Lead Enrichment avatar

Multi-Source Lead Enrichment

Pricing

Pay per event

Go to Apify Store
Multi-Source Lead Enrichment

Multi-Source Lead Enrichment

Enrich business leads with normalized company data, contact scoring, industry classification, seniority detection, email validation, and smart deduplication. Accepts leads as JSON from any source — CRM exports, scrapers, spreadsheets, or APIs. No scraping or external API calls.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Enrich business leads with normalized company data, contact scoring, industry classification, and data completeness analysis. Provide leads as JSON from any source — CRM exports, scrapers, spreadsheets, or APIs.

What does Multi-Source Lead Enrichment do?

Multi-Source Lead Enrichment takes raw lead data and produces clean, structured, scored records ready for sales outreach or CRM import. It normalizes messy fields, infers missing information, scores leads by quality, and deduplicates records from multiple sources.

You provide lead data as JSON. The actor analyzes each record, normalizes names/domains/phones/emails, infers industry/seniority/department, calculates a lead score and data completeness percentage, and tags leads for easy filtering.

This actor does not scrape or fetch any websites. All processing is done on data you provide.

Why use Multi-Source Lead Enrichment?

  • Source-agnostic — Works with leads from any CRM, scraper, spreadsheet, or API
  • Smart deduplication — Merge duplicate leads by domain, email, or company name, keeping the most complete record
  • Lead scoring — 0-100 score based on company data, contact quality, seniority, and multi-source signals
  • Data normalization — Cleans up domains, phone numbers, company names, email validation, company sizes
  • Industry & seniority inference — Automatically classifies leads by industry (20 categories) and seniority level
  • Automatic tagging — Tags like hot-lead, decision-maker, has-business-email, multi-source

Use cases

  • Sales prospecting — Score and prioritize leads before outreach
  • CRM cleanup — Normalize and deduplicate messy lead data from multiple sources
  • Lead qualification — Automatically tag hot leads and decision-makers
  • Data enrichment pipeline — Enrich leads collected by other scrapers or APIs before importing to your CRM
  • Market segmentation — Classify leads by industry, company size, and seniority for targeted campaigns

Input parameters

ParameterTypeRequiredDefaultDescription
leadsobject[]YesBusiness leads as JSON objects. Each lead should have at least one identifiable field (companyName, domain, email, or contactName)
maxLeadsintegerNo500Maximum number of leads to process
deduplicateBystringNodomainDeduplication field: domain, email, companyName, or none

Lead object format

{
"companyName": "Stripe",
"domain": "stripe.com",
"contactName": "Jane Smith",
"contactTitle": "VP of Engineering",
"email": "jane@stripe.com",
"phone": "+1-555-0123",
"location": "San Francisco, CA",
"industry": "Financial Services",
"companySize": "5000",
"source": "LinkedIn"
}

All fields are optional. The more you provide, the higher the lead score and data completeness.

Supported fields: companyName, domain, website, industry, companySize, companyDescription, revenue, founded, headquarters, contactName, firstName, lastName, contactTitle, email, phone, linkedinUrl, location, city, state, country, address, source, sourceUrl, scrapedAt. Any extra fields are passed through.

Output example

{
"companyName": "Stripe",
"domain": "stripe.com",
"website": "https://stripe.com",
"industry": "Financial Services",
"companySize": "1001-5000",
"companyType": "company",
"contactName": "Jane Smith",
"firstName": "Jane",
"lastName": "Smith",
"contactTitle": "VP of Engineering",
"seniorityLevel": "vp",
"department": "Engineering",
"email": "jane@stripe.com",
"emailStatus": "business",
"phone": "+1-555-0123",
"phoneFormatted": "(555) 012-3000",
"linkedinUrl": null,
"location": "San Francisco, CA",
"city": "San Francisco",
"state": "CA",
"country": "US",
"leadScore": 88,
"dataCompleteness": 83,
"sources": ["LinkedIn"],
"sourceCount": 1,
"tags": ["hot-lead", "has-business-email", "decision-maker"],
"enrichedAt": "2026-03-01T12:00:00.000Z"
}

Enrichment fields explained

FieldDescriptionValues
domainNormalized domain extracted from URL, website, or emaile.g., stripe.com
industryInferred or provided industry classification20 categories (Technology, Healthcare, Financial Services, etc.)
companySizeNormalized employee count range1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10000+
companyTypeInferred organization typecompany, startup, agency, nonprofit, education, government
seniorityLevelInferred from contact titlejunior, mid, senior, lead, manager, director, vp, c-level
departmentInferred from contact titleEngineering, Product, Design, Marketing, Sales, etc. (12 departments)
emailStatusEmail classificationbusiness, free-provider, role-account, invalid
phoneFormattedCleaned phone numberUS format: (XXX) XXX-XXXX
leadScoreOverall lead quality score0-100 (company data 30pts + contact 40pts + seniority 15pts + multi-source 15pts)
dataCompletenessPercentage of key fields filled0-100 (checks 12 key fields)
tagsAutomatic labelshot-lead, warm-lead, cold-lead, has-business-email, has-phone, has-linkedin, decision-maker, multi-source, high-completeness

How deduplication works

When deduplicateBy is set (default: domain), leads sharing the same key are merged:

  • Non-null fields from both records are kept (first record wins if both have data)
  • Sources are combined and deduplicated
  • Scores are recalculated after merge

This is useful when combining lead lists from different sources where the same company or contact may appear multiple times.

How much does it cost?

Multi-Source Lead Enrichment uses pay-per-event pricing:

EventPriceDescription
Actor start$0.035Charged once per run
Lead enriched$0.005Charged per successfully enriched lead

Example costs:

  • 10 leads: $0.035 + (10 x $0.005) = $0.085
  • 100 leads: $0.035 + (100 x $0.005) = $0.535
  • 1,000 leads: $0.035 + (1,000 x $0.005) = $5.035

No proxy or browser costs — pure data processing.

Using the Apify API

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('YOUR_ACTOR_ID').call({
leads: [
{
companyName: 'Stripe',
domain: 'stripe.com',
contactName: 'Jane Smith',
contactTitle: 'VP of Engineering',
email: 'jane@stripe.com',
source: 'LinkedIn',
},
],
deduplicateBy: 'domain',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((lead) => {
console.log(`${lead.contactName} at ${lead.companyName} — Score: ${lead.leadScore}`);
console.log(`Tags: ${lead.tags.join(', ')}`);
});

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("YOUR_ACTOR_ID").call(run_input={
"leads": [
{
"companyName": "Stripe",
"domain": "stripe.com",
"contactName": "Jane Smith",
"contactTitle": "VP of Engineering",
"email": "jane@stripe.com",
"source": "LinkedIn",
},
],
"deduplicateBy": "domain",
})
for lead in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{lead['contactName']} at {lead['companyName']} — Score: {lead['leadScore']}")
print(f"Tags: {', '.join(lead['tags'])}")

Integrations

Multi-Source Lead Enrichment can be connected with other tools and services:

  • Google Sheets — Export enriched leads directly to a spreadsheet
  • Webhooks — Get notified when a run completes
  • Zapier / Make — Automate workflows triggered by enriched lead data
  • Other Apify actors — Chain with scraping actors to enrich their output before CRM import

Tips and best practices

  • The more fields you provide per lead, the higher the lead score and data completeness
  • Use deduplicateBy: "domain" when merging leads from multiple sources about the same companies
  • Filter results by leadScore >= 80 to focus on hot leads
  • The tags array lets you quickly segment leads (e.g., all decision-maker + has-business-email leads)
  • Use maxLeads to control costs when processing large batches

Compliance

This actor processes only data that you provide as input. It does not scrape, fetch, or access any third-party websites. You are responsible for ensuring that you have the right to process the lead data you supply.