Multi-Source Lead Enrichment
Pricing
Pay per event
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
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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
leads | object[] | Yes | — | Business leads as JSON objects. Each lead should have at least one identifiable field (companyName, domain, email, or contactName) |
maxLeads | integer | No | 500 | Maximum number of leads to process |
deduplicateBy | string | No | domain | Deduplication 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
| Field | Description | Values |
|---|---|---|
domain | Normalized domain extracted from URL, website, or email | e.g., stripe.com |
industry | Inferred or provided industry classification | 20 categories (Technology, Healthcare, Financial Services, etc.) |
companySize | Normalized employee count range | 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10000+ |
companyType | Inferred organization type | company, startup, agency, nonprofit, education, government |
seniorityLevel | Inferred from contact title | junior, mid, senior, lead, manager, director, vp, c-level |
department | Inferred from contact title | Engineering, Product, Design, Marketing, Sales, etc. (12 departments) |
emailStatus | Email classification | business, free-provider, role-account, invalid |
phoneFormatted | Cleaned phone number | US format: (XXX) XXX-XXXX |
leadScore | Overall lead quality score | 0-100 (company data 30pts + contact 40pts + seniority 15pts + multi-source 15pts) |
dataCompleteness | Percentage of key fields filled | 0-100 (checks 12 key fields) |
tags | Automatic labels | hot-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:
| Event | Price | Description |
|---|---|---|
| Actor start | $0.035 | Charged once per run |
| Lead enriched | $0.005 | Charged 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 ApifyClientclient = 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 >= 80to focus on hot leads - The
tagsarray lets you quickly segment leads (e.g., alldecision-maker+has-business-emailleads) - Use
maxLeadsto 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.