OTHER

Person Enrichment Lookup

Person Enrichment Lookup on ApifyForge — B2B contact enrichment powered by People Data Labs — the same data source behind Clay's most-used enrichment action, at **$0.03 per person** versus Clay's $0.22–$5.63. Provide a list of names, emails, or LinkedIn URLs and get back verified work emails, job titles, seniority levels, phone numbers, company info, social profiles, and location data. No subscription required. Pay only for successful matches.

0
Users (30d)
0
Runs (30d)
90
Actively maintained
Maintenance Pulse
Free
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Documentation

B2B contact enrichment powered by People Data Labs — the same data source behind Clay's most-used enrichment action, at $0.03 per person versus Clay's $0.22–$5.63. Provide a list of names, emails, or LinkedIn URLs and get back verified work emails, job titles, seniority levels, phone numbers, company info, social profiles, and location data. No subscription required. Pay only for successful matches.

This actor calls the PDL Person Enrich API as the primary match method, then automatically falls back to PDL's Elasticsearch-based Person Search API when the direct lookup yields no result. Both paths produce the same clean output schema, with a matchConfidence score (0–10) so you always know how certain the match is. Batch up to 1,000 people in a single run, download as JSON or CSV, and plug into your CRM without manual cleanup.

What data can you extract?

Data PointSourceExample
📧 Work emailPDL verified[email protected]
📧 Personal emailPDL verified[email protected]
👤 Full namePDL canonicalMichael Okonkwo
💼 Job titlePDL currentVP of Engineering
📊 Seniority levelPDL normalisedvp
🏢 DepartmentPDL job sub-rolesoftware
🏢 Company namePDL current employerPinnacle Group
🌐 Company domainPDL verifiedpinnaclegroup.com
🏭 Company industryPDL SIC mappinginformation technology
👥 Company sizePDL band1001-5000
🔗 LinkedIn URLPDL social graphlinkedin.com/in/mokonkwo
🐦 Twitter URLPDL social graphtwitter.com/mokonkwo
💻 GitHub URLPDL social graphgithub.com/mokonkwo
📍 LocationPDL geoSan Francisco, California, US
📞 Phone / MobilePDL verified+1-415-555-0182
🎓 Education (optional)PDL academicUC Berkeley — B.S. Computer Science
📋 Work history (optional)PDL experienceGoogle → Stripe → Pinnacle Group
🛠️ Skills (optional)PDL profile["Python", "Kubernetes", "AWS"]
🎯 Match confidencePDL likelihood score8 (scale 0–10)

Why use Person Enrichment Lookup?

Manual person research takes 5–15 minutes per contact: LinkedIn search, company lookup, guessing email formats, cross-checking data sources. For a list of 200 people, that is 20–50 hours of work that still produces patchy results.

Clay automates this same workflow, but prices PDL enrichment at $0.22–$5.63 per person depending on your plan tier. Apollo charges $99–$249/month for similar data. ZoomInfo starts at $15,000/year. This actor uses the same PDL database and charges $0.03 per successfully enriched person — no subscription, no monthly minimum, no wasted spend on lookups that return nothing.

  • Scheduling — run daily, weekly, or custom intervals to keep CRM data fresh as people change roles
  • API access — trigger enrichment runs from Python, JavaScript, or any HTTP client with a single API call
  • Proxy rotation — Apify's built-in infrastructure handles outbound requests reliably at scale
  • Monitoring — get Slack or email alerts when runs fail or when match rates drop unexpectedly
  • Integrations — connect output directly to Zapier, Make, HubSpot, Google Sheets, or webhooks

Features

  • Dual-API matching strategy — tries PDL Person Enrich (exact lookup by email/LinkedIn/name) first, then falls back to PDL Person Search (Elasticsearch DSL with must clauses on first_name, last_name, job_company_name, job_company_website) to maximise match rate
  • Identifier flexibility — accepts any combination of name, email, company name, domain, and LinkedIn URL; more identifiers produce higher match confidence
  • Minimum likelihood filter — queries PDL with min_likelihood=2 and required=name to avoid low-confidence junk matches polluting your dataset
  • Seniority normalisation — maps PDL's raw job_title_levels array to a single canonical value using a priority ladder: c_suite → vp → director → manager → senior → entry → training
  • Email type separation — splits PDL's typed emails array into distinct email (work) and personalEmail fields, using work/professional type flags
  • Rate-limit resilience — respects PDL's 200ms inter-request cadence and automatically retries once on HTTP 429 with a 2-second pause before failing gracefully
  • Spending limit awareness — checks Apify's eventChargeLimitReached flag after each successful enrichment and stops cleanly without losing already-pushed data
  • Partial result safety — flushes output to the Apify dataset in batches of 100, so a mid-run failure never loses completed records
  • Configurable payload size — work history, education, and skills are disabled by default and enabled individually to keep payloads lean for high-volume runs
  • Input echo — every output row includes inputName, inputEmail, inputCompany, inputDomain so you can join enriched results back to your original list without manual matching
  • Not-found rows — unmatched people produce a source: "not_found" row with nulls rather than being silently dropped, keeping your row count consistent
  • Custom API key support — bring your own PDL API key (free tier: 100 calls/month from PDL directly) or use the built-in shared key; BYOK removes the shared rate limit ceiling

Use cases for person enrichment lookup

Sales prospecting and SDR list building

SDRs and BDRs often receive account lists with only company names and contact names — no emails, no titles, no direct dial numbers. Run this actor against your target list before any outreach sequence starts. Get verified work emails, job titles, and seniority levels back in minutes, then filter to decision-makers (VP and above) before importing to your sales engagement platform.

Marketing agency lead generation

Agencies building prospect databases for clients need enriched contacts at volume. Feed this actor a CSV of names from LinkedIn Sales Navigator exports or event attendee lists. The dual-API fallback strategy catches contacts that PDL's direct enrich misses, raising effective match rates by 15–25% over single-endpoint approaches.

Recruiting and talent sourcing

Recruiters with candidate names but no contact details can enrich a shortlist in one run. The optional includeWorkHistory flag surfaces full career timelines — useful for quickly assessing trajectory without opening each LinkedIn profile manually. Enable includeSkills to match candidates to open role requirements programmatically.

CRM data enrichment and hygiene

Stale CRM records where contacts have changed jobs are a constant problem. Export your contact list, run it through this actor, and compare jobTitle and companyName against your stored values. Records where enriched company data diverges from CRM data flag contacts who have likely moved on. Combine with HubSpot Lead Pusher to write updates back automatically.

B2B lead scoring and qualification

Raw contact lists need context to be useful. After enrichment, use seniority to score contacts by decision-making authority, companySize to filter by ideal customer profile, and companyIndustry to segment by vertical. Pipe the enriched output into B2B Lead Qualifier for a 0–100 composite score built from 30+ signals.

Research and due diligence

Analysts investigating company leadership, founders, or board members need structured data fast. Batch enrichment of key individuals at a target company surfaces their career history, education, and professional networks. The matchConfidence score tells you when to trust the result and when to verify manually.

How to enrich person data

  1. Enter your person list — Click the persons field and paste a JSON array. Each object needs at minimum a name plus one of company, domain, or email. Example: [{"name": "Sarah Chen", "company": "Acme Corp", "domain": "acmecorp.com"}]. More identifiers per person means higher match confidence.

  2. Configure optional fields — Toggle on includeWorkHistory, includeEducation, or includeSkills if you need the richer data. Leave them off for faster, smaller-payload runs. Set maxPersons to cap spend if you are testing a large list.

  3. Run the actor — Click "Start" and wait. Processing runs at 5 people per second (200ms between PDL API calls). A list of 100 people typically completes in 25–35 seconds. A list of 1,000 completes in under 10 minutes.

  4. Download results — Go to the Dataset tab, then export as JSON, CSV, or Excel. Filter the export to exclude source: "not_found" rows if you only want matched records. Join back to your original list using the inputEmail or inputName columns.

Input parameters

ParameterTypeRequiredDefaultDescription
personsarrayYesArray of person objects to enrich. Each object: name, email, company, domain, linkedinUrl (all optional, but at least one identity signal required)
pdlApiKeystringNoBuilt-inYour PDL API key. Built-in key covers up to 100 lookups/month. Bring your own key for higher volume
maxPersonsintegerNo100Maximum persons to process in one run (1–1,000). Safety cap to prevent accidental over-billing
includeWorkHistorybooleanNofalseInclude full job history array in output. Each entry: company, title, startDate, endDate
includeEducationbooleanNofalseInclude education history (school, degree, field of study) in output
includeSkillsbooleanNofalseInclude skills array from PDL profile in output

Input examples

Enrich by name and company (most common):

{
  "persons": [
    { "name": "Sarah Chen", "company": "Acme Corp", "domain": "acmecorp.com" },
    { "name": "James Okafor", "company": "Beta Industries", "domain": "betaindustries.io" },
    { "name": "Priya Nair", "company": "Vertex Solutions" }
  ],
  "maxPersons": 100
}

Enrich by email with full profile data:

{
  "persons": [
    { "email": "[email protected]" },
    { "email": "[email protected]" },
    { "linkedinUrl": "https://www.linkedin.com/in/priya-nair-vertex" }
  ],
  "includeWorkHistory": true,
  "includeEducation": true,
  "includeSkills": true,
  "maxPersons": 50
}

Quick test — single person:

{
  "persons": [
    { "name": "Jan Curn", "company": "Apify", "domain": "apify.com" }
  ],
  "maxPersons": 1
}

Input tips

  • More identifiers improve match accuracy — providing name + company + domain together is significantly more reliable than name alone; email or LinkedIn URL give the highest confidence matches
  • Use domain alongside company name — the actor passes the domain as both website and a fallback company parameter to PDL, which increases match rate for companies with non-obvious names
  • Set maxPersons when testing — start with 5–10 to verify output quality before processing your full list; you only pay for successful enrichments
  • Batch in one run — processing 500 people in one run is faster and cheaper than 500 individual runs due to Apify platform overhead
  • Leave optional fields off for large batchesincludeWorkHistory and includeSkills add significant payload size; only enable them when you need that data specifically

Output example

{
  "inputName": "Sarah Chen",
  "inputEmail": null,
  "inputCompany": "Acme Corp",
  "inputDomain": "acmecorp.com",

  "fullName": "Sarah Chen",
  "firstName": "Sarah",
  "lastName": "Chen",
  "email": "[email protected]",
  "personalEmail": "[email protected]",
  "phone": "+1-415-555-0147",
  "mobilePhone": "+1-415-555-0147",

  "jobTitle": "Head of Product Marketing",
  "jobTitleRole": "marketing",
  "seniority": "director",
  "department": "product marketing",

  "companyName": "Acme Corp",
  "companyDomain": "acmecorp.com",
  "companyIndustry": "software / saas",
  "companySize": "501-1000",
  "companyLinkedinUrl": "https://www.linkedin.com/company/acme-corp",

  "linkedinUrl": "https://www.linkedin.com/in/sarahchen-pm",
  "twitterUrl": "https://twitter.com/sarahchenpm",
  "githubUrl": null,
  "facebookUrl": null,

  "location": "San Francisco, California, United States",
  "city": "San Francisco",
  "state": "California",
  "country": "United States",

  "workHistory": [
    { "company": "Stripe", "title": "Senior Product Marketing Manager", "startDate": "2019-03", "endDate": "2022-01" },
    { "company": "Salesforce", "title": "Product Marketing Manager", "startDate": "2016-07", "endDate": "2019-02" }
  ],

  "education": [
    { "school": "University of California Berkeley", "degree": "B.S.", "field": "Marketing" }
  ],

  "skills": ["go-to-market strategy", "product launches", "demand generation", "salesforce", "hubspot"],

  "pdlId": "qEnOZ98lib6NRxLIWAk0Vg_0000",
  "matchConfidence": 8,
  "enrichedAt": "2026-03-23T14:22:11.403Z",
  "source": "pdl_enrich"
}

Output fields

FieldTypeDescription
inputNamestring|nullName from input (for join-back)
inputEmailstring|nullEmail from input (for join-back)
inputCompanystring|nullCompany from input (for join-back)
inputDomainstring|nullDomain from input (for join-back)
fullNamestring|nullPDL canonical full name
firstNamestring|nullFirst name
lastNamestring|nullLast name
emailstring|nullWork/professional email
personalEmailstring|nullPersonal email (if PDL has it)
phonestring|nullPrimary phone number
mobilePhonestring|nullMobile phone if separately listed
jobTitlestring|nullCurrent job title
jobTitleRolestring|nullBroad role category (e.g. engineering, sales)
senioritystring|nullNormalised seniority: c_suite, vp, director, manager, senior, entry
departmentstring|nullDepartment/sub-role (e.g. product marketing, software)
companyNamestring|nullCurrent employer name
companyDomainstring|nullCurrent employer website domain
companyIndustrystring|nullIndustry classification
companySizestring|nullEmployee count band (e.g. 501-1000)
companyLinkedinUrlstring|nullCompany LinkedIn page URL
linkedinUrlstring|nullPerson's LinkedIn profile URL
twitterUrlstring|nullTwitter/X profile URL
githubUrlstring|nullGitHub profile URL
facebookUrlstring|nullFacebook profile URL
locationstring|nullFull location string
citystring|nullCity
statestring|nullState or region
countrystring|nullCountry
workHistory[]array|nullPast jobs (enabled via includeWorkHistory)
workHistory[].companystringEmployer name
workHistory[].titlestringJob title held
workHistory[].startDatestring|nullStart date (YYYY-MM)
workHistory[].endDatestring|nullEnd date (YYYY-MM), null if current
education[]array|nullEducation records (enabled via includeEducation)
education[].schoolstringInstitution name
education[].degreestring|nullDegree type (e.g. B.S., MBA)
education[].fieldstring|nullField of study
skillsarray|nullSkills list (enabled via includeSkills)
pdlIdstring|nullPDL internal person ID (stable unique identifier)
matchConfidencenumber|nullPDL likelihood score 0–10 (10 = exact match)
enrichedAtstringISO 8601 timestamp of enrichment
sourcestringpdl_enrich, pdl_search, or not_found

How much does it cost to enrich person data?

Person Enrichment Lookup uses pay-per-event pricing — you pay $0.03 per successfully enriched person. People who return no match (source: "not_found") are not charged. Platform compute costs are included.

ScenarioPeople processedMatch rate (typical)People enrichedTotal cost
Quick test1080%~8~$0.24
Small batch5080%~40~$1.20
Medium batch20080%~160~$4.80
Large batch50080%~400~$12.00
Enterprise batch1,00080%~800~$24.00

You can set a maximum spending limit per run to control costs. The actor stops cleanly when your budget is reached, and all already-enriched records are saved to the dataset before the run ends.

Compare this to Clay at $0.22–$5.63 per PDL enrichment depending on plan, or Apollo at $99–$249/month for a contact database. Most users running 500–1,000 enrichments per month spend $15–$25 with no subscription commitment. Apify's free tier also includes $5 of monthly credits, covering roughly 166 enrichments at no cost.

Person enrichment using the API

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/person-enrichment-lookup").call(run_input={
    "persons": [
        {"name": "Sarah Chen", "company": "Acme Corp", "domain": "acmecorp.com"},
        {"name": "James Okafor", "company": "Beta Industries"},
        {"email": "[email protected]"},
    ],
    "maxPersons": 100,
    "includeWorkHistory": False,
    "includeEducation": False,
    "includeSkills": False,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item.get("source") != "not_found":
        print(f"{item['fullName']} | {item['jobTitle']} @ {item['companyName']} | {item['email']} | confidence: {item['matchConfidence']}")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/person-enrichment-lookup").call({
    persons: [
        { name: "Sarah Chen", company: "Acme Corp", domain: "acmecorp.com" },
        { name: "James Okafor", company: "Beta Industries" },
        { email: "[email protected]" },
    ],
    maxPersons: 100,
    includeWorkHistory: false,
    includeEducation: false,
    includeSkills: false,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    if (item.source !== "not_found") {
        console.log(`${item.fullName} | ${item.jobTitle} @ ${item.companyName} | ${item.email} | confidence: ${item.matchConfidence}`);
    }
}

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~person-enrichment-lookup/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "persons": [
      {"name": "Sarah Chen", "company": "Acme Corp", "domain": "acmecorp.com"},
      {"email": "[email protected]"}
    ],
    "maxPersons": 100
  }'

# Fetch results (replace DATASET_ID from the run response above)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

How Person Enrichment Lookup works

Phase 1 — Identifier assembly and PDL Enrich call

The actor builds a PDL Enrich API query from every available identifier on the person object. Email maps to email, LinkedIn URL to profile, name is split on whitespace into first_name + last_name, company maps to company, and domain maps to website. When no company name is present but a domain is, the domain is passed as both website and company to maximise PDL's fuzzy matching surface. The request requires at minimum one of: email, linkedinUrl, or name. The query always includes min_likelihood=2 and required=name to suppress spurious matches. A 30-second timeout is enforced via AbortController. HTTP 429 responses trigger one automatic retry after a 2-second pause before the request is marked as failed.

Phase 2 — PDL Search fallback

When the Enrich endpoint returns HTTP 404 (no match in PDL's direct lookup index), and the input includes both a name and a company or domain, the actor constructs an Elasticsearch DSL query against PDL's Person Search endpoint. The query uses bool.must clauses matching first_name, last_name, and either job_company_name or job_company_website (using a term filter for domain, a match clause for company name). Only the top-ranked result (size: 1) is returned. This fallback path catches people whose PDL record cannot be hit by exact identifier match but who are findable by name-and-employer combination.

Phase 3 — Data transformation and normalisation

The raw PDL profile goes through a set of deterministic transforms before being written to the dataset. Seniority is normalised from job_title_levels[] using a fixed priority ladder (c_suite takes precedence over vp, which takes precedence over director, and so on). Emails are typed: addresses with type=work or type=professional become email; addresses with type=personal become personalEmail; all other typed emails fall back to the work slot. Work history entries are mapped from PDL's experience[] structure, filtering out entries with neither company nor title. Education entries filter to records with a school name. The pdlId field carries PDL's stable internal person identifier, useful for deduplication across multiple enrichment runs.

Phase 4 — Charging and output

PPE charging fires only after a record is confirmed as source !== "not_found" and after the data has been pushed to the Apify dataset — ensuring you never pay for a charge where the data was not saved. The actor monitors chargeResult.eventChargeLimitReached after every charge event and stops cleanly if your spending limit is reached. Completed records are flushed to the dataset in batches of 100. A summary record is always written as the final dataset entry, regardless of whether the run completed fully or was stopped by a spending limit or credit exhaustion.

Tips for best results

  1. Provide email when you have it. Email is PDL's highest-confidence identifier. A lookup by email alone typically returns matchConfidence of 8–10, versus 5–7 for name + company alone.

  2. Include the company domain alongside the company name. The actor passes domain as both website and a fallback company parameter. This catches PDL records where the company name is stored differently than you have it (e.g. "Acme" vs "Acme Corp" vs "Acme Corporation").

  3. Filter output by matchConfidence before importing to CRM. Scores of 6 and above are generally reliable. Scores of 2–4 from the Search fallback path should be manually verified before sending outreach.

  4. Use source to understand your match rate. After a run, count records by source value: pdl_enrich (best), pdl_search (good, fallback), not_found (no match). A high not_found rate often means input names need cleaning or the people are not in PDL's database (common for very small companies).

  5. For large batches, set maxPersons to a safe cap. If you have 5,000 names but are unsure of match rate, run 100 first to gauge quality and match rate before committing to the full list.

  6. Combine with Email Pattern Finder for un-enrichable contacts. When PDL returns not_found, you can still derive a probable work email by running the domain through Email Pattern Finder to get the company's email naming convention (e.g. {first}.{last}@domain.com).

  7. Schedule weekly runs to catch job changes. People change roles every 18–24 months on average. A weekly enrichment run against your active CRM contacts will surface companyName or jobTitle changes that indicate a contact has moved on.

  8. Bring your own PDL API key for enterprise volume. The built-in key is shared and subject to PDL's free-tier limits. A PDL paid account starts at $98/month and provides significantly higher call limits if you are running thousands of lookups daily.

Combine with other Apify actors

ActorHow to combine
Website Contact ScraperScrape a company website to find employee names and partial emails, then enrich each person here for complete profiles
Google Maps Email ExtractorExtract business owner contacts from Google Maps, then enrich each contact with job title and seniority via this actor
Email Pattern FinderFor contacts this actor returns as not_found, use Email Pattern Finder to derive a probable email from the company domain
Bulk Email VerifierVerify the email field returned by enrichment before sending outreach — confirms MX record and SMTP deliverability
B2B Lead QualifierPipe enriched records into the qualifier to score each contact 0–100 from seniority, company size, industry, and 27 other signals
HubSpot Lead PusherWrite enriched contacts directly into HubSpot with mapped field names
Waterfall Contact EnrichmentUse as the PDL step in a 10-source waterfall cascade to maximise total enrichment coverage

Limitations

  • PDL database coverage — PDL covers approximately 3 billion professional profiles, but match rates vary by region and company size. Expect 70–85% match rates for US/UK professionals at companies with 50+ employees. Rates drop to 40–60% for freelancers, very small businesses, and professionals in markets where LinkedIn adoption is low.
  • No JavaScript rendering — this actor makes direct HTTP calls to the PDL API and does not scrape websites. If you need to extract contact details from JavaScript-rendered company pages before enriching, use Website Contact Scraper Pro first.
  • Data freshness — PDL refreshes its database on a rolling basis, but profiles may lag behind real-world job changes by 2–6 months. matchConfidence does not reflect recency, only identity match certainty.
  • 1,000 persons per run maximum — the maxPersons cap is enforced at 1,000. For larger lists, split into multiple runs or use the API to queue batches.
  • Built-in API key limit — the shared built-in PDL key covers a limited number of lookups per month across all users of the actor. For reliable high-volume use, bring your own PDL API key.
  • No bulk-lookup discount — PDL charges per API call regardless of batch size on the calling side. This actor's pricing reflects per-enriched-person charges.
  • Seniority for non-English titles — PDL's job_title_levels normalisation is less reliable for job titles in non-English languages. The seniority field may be null for some international profiles.
  • Phone number availability — PDL has phone data for roughly 20–30% of profiles. The phone and mobilePhone fields will be null for the majority of enriched contacts.

Integrations

  • Zapier — trigger enrichment runs from a Zap when new contacts are added to a spreadsheet or CRM, then route enriched records to any Zapier-connected app
  • Make — build enrichment automations that run on a schedule or in response to form submissions, webhooks, or CRM events
  • Google Sheets — export enriched contact lists directly to a Sheet for team review or import into marketing tools
  • Apify API — trigger runs programmatically from your own backend, CRM integration scripts, or data pipeline
  • Webhooks — post enriched dataset results to your CRM or data warehouse endpoint immediately when a run completes
  • LangChain / LlamaIndex — use enriched person data as structured context for AI sales agents, automated outreach writers, or research assistants

Troubleshooting

  • High not_found rate despite correct names — verify your company names match how PDL stores them. "Meta" versus "Facebook" or "Alphabet" versus "Google" can cause misses on the Search fallback path. Try adding the domain (domain: "meta.com") alongside the company name to give PDL a domain-based match path.

  • matchConfidence is low (2–4) on returned records — low scores typically come from the PDL Search fallback path. These are fuzzy matches on name + employer. Always filter output by matchConfidence >= 5 before importing to CRM or sending outreach. Low-confidence records should be manually verified.

  • Run stops early with "PDL API credits exhausted" in the status — this means the built-in API key has hit its monthly limit. Either wait for the calendar month to reset, or add your own PDL API key in the pdlApiKey field. PDL's free tier provides 100 API calls/month per account at peopledatalabs.com.

  • Run stops with "Spending limit reached" — your Apify run budget cap was hit. This is by design. Increase your spending limit in the actor run settings, or process a smaller batch. All records enriched before the limit was reached are saved in the dataset.

  • Email field is null but personalEmail has a value — PDL has a personal email on file but no verified work email. You can use Email Pattern Finder on the person's company domain to derive the likely work email format.

Responsible use

  • This actor only queries the People Data Labs API using data you provide. It does not scrape any websites or access private systems.
  • PDL's data is aggregated from public professional sources including LinkedIn, company websites, and professional directories.
  • Comply with GDPR, CAN-SPAM, CASL, and other applicable data protection laws when using enriched contact data for outreach.
  • Do not use enriched data for spam, harassment, profiling without lawful basis, or any purpose that violates the terms of service of the platforms from which the underlying data originates.
  • For guidance on the legal framework around B2B contact data, see Apify's guide on web scraping legality.

FAQ

How many people can I enrich in one run with Person Enrichment Lookup? Up to 1,000 persons per run. Set maxPersons in your input to control the limit. For lists larger than 1,000, split into multiple runs or use the Apify API to queue batches sequentially.

What identifiers does person enrichment require? Each person needs at minimum one of: email address, LinkedIn URL, or full name. For name-only records, at least one of company or domain is required to enable the Search fallback. More identifiers produce higher matchConfidence scores.

How accurate is person enrichment from PDL? PDL's direct Enrich endpoint (email or LinkedIn-based lookups) consistently returns matchConfidence of 8–10. Name + company searches via the fallback path return 5–7. Match rates vary by region: 75–85% for US/UK enterprise contacts, 40–65% for other markets. The matchConfidence score on every record tells you how much to trust each match.

How long does a typical person enrichment run take? The actor enforces a 200ms delay between PDL API calls to respect rate limits. A batch of 100 people completes in approximately 30 seconds. A batch of 1,000 completes in 4–8 minutes depending on how many Search fallback calls are needed.

Does person enrichment work for people outside the United States? Yes, PDL has global coverage, but match rates are higher for professionals in markets with strong LinkedIn adoption (US, UK, Canada, Australia, Western Europe). Match rates are lower for professionals in markets where LinkedIn is less dominant.

How is Person Enrichment Lookup different from Clay? Both use the People Data Labs API as a data source. Clay charges $0.22–$5.63 per PDL enrichment depending on your subscription tier, plus a monthly platform fee. This actor charges $0.03 per successfully enriched person with no subscription. You only pay for matches, not misses. The actor also provides a Search fallback path that Clay's PDL action does not expose, improving match rates for name + company inputs.

How is this different from Apollo or ZoomInfo? Apollo ($99–$249/month) and ZoomInfo ($15,000+/year) are full sales intelligence platforms. This actor is a single-purpose enrichment tool that uses PDL's independent B2B database. It costs less per lookup, requires no subscription, and outputs clean structured JSON that maps directly into any CRM or data pipeline. It does not replace the prospecting search features of Apollo or ZoomInfo.

Can I use my own People Data Labs API key? Yes. Add your PDL API key to the pdlApiKey field. The built-in key is shared and subject to PDL's free-tier rate limits. Bringing your own key removes that ceiling. PDL's free tier provides 100 API calls/month; paid plans start at $98/month.

Is person enrichment legal? PDL aggregates data from public professional sources. Querying PDL's API to enrich business contact data for legitimate B2B purposes is generally lawful. You must comply with applicable data protection regulations (GDPR, CAN-SPAM, CASL) in how you use the enriched data. For detailed guidance see Apify's legal guide.

What happens if a person is not found in PDL? The actor records a result row with source: "not_found" and null values for all enriched fields. You are not charged for not-found records. The row is still written to the dataset so your row count matches your input list, making join-back straightforward.

Can I schedule person enrichment to run automatically? Yes. Use Apify's built-in scheduler to run enrichment on a daily, weekly, or custom cron schedule. This is useful for refreshing CRM contact data on a recurring basis to catch job changes.

Can I combine person enrichment with other actors in an automated pipeline? Yes. The most common pipeline is: scrape company websites with Website Contact Scraper → enrich contacts here → verify emails with Bulk Email Verifier → push to HubSpot with HubSpot Lead Pusher. You can connect these steps via Apify webhooks or Make/Zapier automations.

Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

  1. Go to Account Settings > Privacy
  2. Enable Share runs with public Actor creators

This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

Get results

Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.

Use cases

Sales Teams

Build targeted lead lists with verified contact data.

Marketing

Research competitors and identify outreach opportunities.

Data Teams

Automate data collection pipelines with scheduled runs.

Developers

Integrate via REST API or use as an MCP tool in AI workflows.

Last updated March 21, 2026

Ready to try Person Enrichment Lookup?

Start for free on Apify. No credit card required.

Open on Apify Store