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

4

Total users

2

Monthly active users

a day ago

Last modified

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 to enrich and score business leads

  1. Go to Multi-Source Lead Enrichment on Apify Store.
  2. Add your lead data as JSON objects in the leads field -- each lead needs at least one identifiable field (companyName, domain, email, or contactName).
  3. Choose a deduplicateBy strategy (domain, email, companyName, or none).
  4. Optionally set maxLeads to limit the number of leads processed.
  5. Click Start and wait for the run to finish.
  6. Download enriched, scored, and tagged leads as JSON, CSV, or Excel from the Dataset tab.

How much does it cost to enrich leads?

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('automation-lab/multi-source-lead-enrichment').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("automation-lab/multi-source-lead-enrichment").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

Connect Multi-Source Lead Enrichment with your sales stack:

  • Google Sheets — Export enriched, scored leads directly to a shared spreadsheet for your sales team
  • Zapier — Auto-route hot leads (score 80+) to Salesforce, HubSpot, or Pipedrive
  • Make — Build multi-step pipelines: scrape leads with Google Maps Lead Finder, enrich and score them, then push to your CRM
  • Webhooks — Send enriched results to your own API endpoint for custom routing
  • Other Apify actors — Chain with scraping actors to enrich their output before CRM import

Use with cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~multi-source-lead-enrichment/runs?token=YOUR_API_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{
"leads": [
{
"companyName": "Stripe",
"domain": "stripe.com",
"contactName": "Jane Smith",
"contactTitle": "VP of Engineering",
"email": "jane@stripe.com",
"source": "LinkedIn"
}
],
"deduplicateBy": "domain"
}'

Use with AI agents via MCP

Multi-Source Lead Enrichment is available as a tool for AI assistants that support the Model Context Protocol (MCP).

Setup for Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com"

Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com"
}
}
}

Example prompts

Once connected, try asking your AI assistant:

  • "Enrich this list of business leads with social profiles and contact info"
  • "Score and enrich these 100 leads from my CRM export"

Learn more in the Apify MCP documentation.

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.

Legality

This actor accesses publicly available data through official or public APIs. API usage is subject to each service's Terms of Service and rate limits. Always review the API provider's usage policies before running at scale.

FAQ

What happens if my leads have different field names than expected? The actor recognizes common field variations (e.g., company maps to companyName, name maps to contactName, url or website maps to domain). Extra fields not in the supported list are passed through unchanged.

How does deduplication handle conflicts? When two leads share the same deduplication key, the first record's non-null fields take priority. Sources are merged so you can see which sources contributed data. Lead scores are recalculated after the merge.

Can I chain this with scraping actors? Yes. A common pipeline is: scrape leads with Google Maps Lead Finder or Indeed Scraper, then feed the results into Multi-Source Lead Enrichment for scoring, normalization, and tagging before CRM import. Use Make or Zapier to automate the pipeline.

Why is my lead score lower than expected? Lead score depends on multiple factors: company data (30 pts), contact info (40 pts), seniority (15 pts), and multi-source signals (15 pts). Missing fields like email, phone, or title significantly reduce the score. Provide as many fields as possible for higher scores.

Other lead generation tools