LinkedIn Decision-Maker Finder
Pricing
Pay per usage
LinkedIn Decision-Maker Finder
Find the right LinkedIn decision-makers from names, company pages, people-search URLs, or exact profile URLs, then return confidence-scored matches with optional public profile and contact enrichment.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Netdesignr
Actor stats
1
Bookmarked
33
Total users
22
Monthly active users
7 days ago
Last modified
Categories
Share
Find the right LinkedIn decision-makers from names, company pages, people-search URLs, or exact profile URLs, then return confidence-scored matches with optional public profile and contact enrichment.
This actor is built for two audiences:
- teams that want a production-ready LinkedIn lead enrichment actor for Apify, Clay, n8n, CRMs, and outbound workflows
- internal tools and AI agents that need stable inputs, explicit match confidence, and structured row-level output
It is designed to solve the gap between simple search-only actors and expensive profile enrichers by handling:
- people discovery
- profile matching
- profile enrichment
- optional public contact enrichment
- explicit matched, unmatched, and failed outcomes
What You Can Do With It
- find decision-makers from a company name, LinkedIn company URL, or free-text query
- match a CSV row like
name + company + titleto a public LinkedIn profile - enrich matched profiles with headline, role, company, location, about, experience, education, and skills
- optionally look for public email and phone data on the company website
- route results into Clay, n8n, a CRM import, or a custom backend without post-processing guesswork
Good Fit
Use this actor if you need:
- outbound lead generation
- recruiter sourcing support
- founder or executive discovery by company
- row-by-row CRM enrichment
- decision-maker matching with confidence scoring
- a no-cookie default workflow
This actor is probably not the right fit if you need:
- LinkedIn jobs scraping
- full LinkedIn post or comment scraping
- guaranteed verified email coverage
- authenticated Sales Navigator scraping as the default path
Quick “Can I Use This For…” Guide
You can use this actor if you want to:
- upload a CSV of prospects and get best-match LinkedIn profiles back
- start from a LinkedIn company URL and discover likely founders, CEOs, VPs, and directors
- run broad lead discovery queries like
founder fintech london - enrich existing lead lists with cleaner profile data before outreach
- send row-level outputs to Clay, n8n, or your own enrichment pipeline
Why This Actor
- one actor for search, match, enrichment, and export-ready output
- confidence scores and match reason codes instead of opaque “best effort”
- unmatched rows are preserved with failure reasons
- contact enrichment is clearly separated from profile enrichment
- pricing is intended to stay transparent and materially below premium enrichers
How To Use It
1. Choose the right run mode
match_onlyUse this when you only need the best LinkedIn profile match.enrich_profilesUse this when you also want structured public profile fields.enrich_profiles_and_contactsUse this when you also want public email and phone discovery from the company website.
2. Pick your input style
queriesBest for broad discovery and list building.rowsBest for CSV, Clay, CRM, and lead-enrichment jobs.peopleSearchUrlsBest when you already have a LinkedIn people search to convert into export-ready output.companyUrlsBest for company-to-decision-maker discovery.linkedinProfileUrlsBest when you already know the exact public LinkedIn profile URL and want the most deterministic path.
3. Set your confidence threshold
55-65Good default range for most prospecting workflows.70+Better when you want fewer but safer matches.- under
55Better when you prefer broader recall and are okay reviewing lower-confidence rows.
4. Start with one of these proven recipes
The examples below are designed to be directly usable with minimal editing.
Common Input Recipes
1. Match one known person to LinkedIn
Use this when you already know the name and company and want the safest match.
{"mode": "match_only","rows": [{"id": "lead-1","name": "Satya Nadella","company": "Microsoft","title": "CEO","location": "United States"}],"minConfidence": 70,"maxResults": 10}
Expected outcome:
- one
lead-matchrecord - status usually
matched - high
matchConfidence - explicit
matchReasonandmatchReasonCodes
2. Enrich a CSV-style lead list
Use this when you have rows from a CRM, spreadsheet, or Clay table.
{"mode": "enrich_profiles","rows": [{"id": "acct-001","name": "Jane Doe","company": "Example Labs","title": "VP Sales","location": "London"},{"id": "acct-002","name": "John Smith","company": "Northstar AI","title": "Head of Growth","location": "New York"}],"includeExperience": true,"includeEducation": true,"includeSkills": true,"minConfidence": 60,"maxResults": 25}
Expected outcome:
- one row-level result per input row
- matched rows enriched with
headline,currentTitle,currentCompany,about,experience,education, andskills - unmatched rows preserved with
failureReason
3. Discover decision-makers from a LinkedIn company URL
Use this when you want to find likely founders or senior leaders at target accounts.
{"mode": "enrich_profiles","companyUrls": ["https://www.linkedin.com/company/openai/","https://www.linkedin.com/company/stripe/"],"currentTitleKeywords": ["founder","co-founder","ceo","cto","vp","director"],"location": "United States","minConfidence": 55,"maxResults": 20}
Expected outcome:
- candidate leaders discovered per company
- strong reason codes from title-keyword and company overlap
- useful for account-based prospecting
4. Run a broad discovery query
Use this when you want to explore a market or persona before building a target list.
{"mode": "enrich_profiles","queries": ["founder fintech london","vp sales b2b saas germany"],"minConfidence": 55,"maxResults": 25}
Expected outcome:
- query-driven candidate discovery
- good for list building and research
- best when you do not already have names
5. Enrich profiles and look for public contact data
Use this when you want a single run to return the best profile plus any public company-site contact hints.
{"mode": "enrich_profiles_and_contacts","rows": [{"id": "lead-1","name": "Jane Doe","company": "Example Labs","title": "VP Sales","location": "London"}],"includeContacts": true,"currentTitleKeywords": ["vp", "director", "head", "sales"],"minConfidence": 60,"maxResults": 10}
Expected outcome:
- enriched profile fields
- optional
email,emailConfidence,phone, andphoneConfidence - contact enrichment billed only when contact data is actually returned
6. Use an existing LinkedIn people-search URL
Use this when your team already has a LinkedIn people search and wants structured output.
{"mode": "enrich_profiles","peopleSearchUrls": ["https://www.linkedin.com/search/results/people/?keywords=vp%20sales%20saas%20london"],"minConfidence": 55,"maxResults": 15}
Expected outcome:
- the actor converts the people search into public discovery queries
- matched results stay normalized with the same output contract as row-based runs
7. Use an exact LinkedIn profile URL
Use this when you already know the exact profile and want to bypass discovery. This is the most reliable mode for large-scale re-processing.
{"mode": "enrich_profiles","linkedinProfileUrls": ["https://www.linkedin.com/in/mihai-diaconita/"],"minConfidence": 55,"maxResults": 10}
Expected outcome:
- deterministic profile match anchored on the supplied URL
- public enrichment attempted from the known profile URL
- if enrichment is blocked, the actor can still return a matched or partially enriched record instead of falling back to search-only behavior
8. Proven example: Mihai Diaconita at Netdesignr
This is a real actor-tested example showing how a user can verify and enrich a known LinkedIn lead.
Input:
{"inputType": "csv_rows","mode": "enrich_profiles","rows": [{"id": "mihai-demo-1","name": "Mihai Diaconita","company": "Netdesignr","linkedinProfileUrl": "https://www.linkedin.com/in/mihai-diaconita/"}],"minConfidence": 55,"maxResults": 5,"emptyRunPolicy": "retry_then_warn"}
Output retrieved from the actor:
| Field | Value |
|---|---|
status | matched_and_enriched |
sourceType | profile_url |
matchConfidence | 100 |
matchReason | direct_profile_url |
linkedinProfileUrl | https://www.linkedin.com/in/mihai-diaconita |
fullName | Mihai Diaconita |
inputCompany | Netdesignr |
headline | at Netdesignr |
currentCompany | at Netdesignr |
billing.matchedResultBilled | true |
billing.profileEnrichmentBilled | true |
What this proves:
- the actor can take a known LinkedIn profile URL and turn it into a deterministic matched lead record
- the actor normalizes the profile URL before returning it
- the actor produces a machine-friendly confidence signal that can be used in CRM or Clay workflows
- the actor can enrich the row without relying on search discovery first
9. Real user use cases based on the Mihai / Netdesignr run
CRM cleanup and verification
Use case:
- a sales ops team already has LinkedIn URLs stored in a CRM
- they want to confirm which rows still point to the intended person
How the actor helps:
- it returns
matchConfidence: 100 - it labels the reason as
direct_profile_url - it gives back a canonical LinkedIn URL
User benefit:
- safer CRM cleanup
- less manual checking
- fewer broken or duplicate profile references
Batch re-enrichment of known profiles
Use case:
- a team has thousands or millions of known LinkedIn profile URLs
- they want to reprocess them into a consistent schema
How the actor helps:
- it bypasses discovery when
linkedinProfileUrlis supplied - it still returns structured lead records and billing flags
- it can produce matched output even when discovery would be noisy or expensive
User benefit:
- lower operational cost than rediscovering every person
- deterministic matching for high-scale pipelines
- easier re-runs and auditability
Workflow routing in Clay, n8n, or internal tooling
Use case:
- a workflow needs to decide whether a lead should be auto-accepted or sent for manual review
How the actor helps:
matchConfidence: 100andmatchReason: direct_profile_urlcan be used as safe routing rulesmatched_and_enrichedshows the row is ready for downstream systems
User benefit:
- only high-confidence records are auto-synced
- lower review burden for operators
- clearer pipeline logic for known-profile enrichment
Input Guide
Core fields
modematch_only,enrich_profiles, orenrich_profiles_and_contactsmaxResultshard cap on returned matched rowsminConfidencethreshold from1-100deduplicateResultsremoves duplicate profile URLs inside each row’s candidate set
Search and matching hints
locationsenioritycurrentCompanycurrentTitleKeywordsindustrycompanySize
Enrichment toggles
includeExperienceincludeEducationincludeSkillsincludeContacts
Operational controls
emptyRunPolicyretry_then_fail,retry_then_warn, orretry_then_succeed
Output Contract
Each input row returns one of these statuses:
matchedmatched_and_enrichedmatched_and_partially_enrichedunmatchedfailed
Important output fields
| Field | What it means |
|---|---|
inputRowId | Stable row identifier for your workflow |
matchConfidence | 0-100 confidence score |
matchReason | Human-readable explanation of why the profile was selected |
matchReasonCodes | Machine-friendly reason codes |
linkedinProfileUrl | Best matched LinkedIn profile URL |
fullName | Matched profile name |
headline | Current headline or summary line |
currentTitle | Current title when available |
currentCompany | Current company when available |
companyWebsite | Discovered company site when available |
email / phone | Public contact data when available |
failureReason | Why the row was unmatched or failed |
billing | Which billable units were triggered for that row |
Example output
{"recordType": "lead-match","status": "matched_and_enriched","sourceType": "row","inputRowId": "acct-001","inputName": "Jane Doe","inputCompany": "Example Labs","inputTitle": "VP Sales","matchConfidence": 92,"matchReason": "name_exact, company_exact, title_exact, location_match","matchReasonCodes": ["name_exact","company_exact","title_exact","location_match"],"linkedinProfileUrl": "https://www.linkedin.com/in/jane-doe","fullName": "Jane Doe","headline": "VP Sales at Example Labs","currentTitle": "VP Sales","currentCompany": "Example Labs","location": "London, England, United Kingdom","industry": "Software Development","about": "Revenue leader helping B2B software teams scale go-to-market execution.","experience": [{"title": "VP Sales","company": "Example Labs"}],"education": [{"school": "University of London","degree": "MBA"}],"skills": ["Sales Strategy","Revenue Operations"],"companyLinkedinUrl": "https://www.linkedin.com/company/example-labs/","companyWebsite": "https://examplelabs.com","email": "jane.doe@examplelabs.com","emailConfidence": 75,"phone": "+44 20 7946 0958","phoneConfidence": 75,"warnings": [],"billing": {"matchedResultBilled": true,"profileEnrichmentBilled": true,"contactEnrichmentBilled": true},"scrapedAt": "2026-03-18T12:00:00.000Z"}
The actor also persists:
RUN_METARUN_SUMMARY
That makes it easier to automate quality checks and billing audits.
Match Confidence
The confidence score is driven by evidence such as:
- exact or near-exact name match
- current company overlap
- title overlap
- decision-maker keyword overlap
- location overlap
- industry overlap
The actor also stores mismatch penalties. That makes low-confidence cases easier to review downstream.
Pricing and Competitive Position
Planned pricing for this actor:
- match mode: from
$0.75 / 1,000 matched results - profile enrichment mode: from
$2.99 / 1,000 enriched profiles - contact enrichment add-on: charged only when contact data is actually returned
Competitive position validated on March 18, 2026:
- clearly below premium no-cookie enrichers like
dev_fusion/linkedin-profile-scraperat$10 / 1,000 results - far below the directly named
piotrv1001/linkedin-decision-maker-finderatfrom $25 / 1,000 results - slightly above the cheapest raw profile scraper listings around
$2 / 1,000 profiles, which is acceptable because this actor adds matching, confidence scoring, row traceability, and optional contact enrichment
Recommended marketplace message:
- “Clear pricing. No pay-per-event ambiguity.”
- “Find the right person, not just a similar profile.”
- “Confidence-scored LinkedIn matches at scale.”
Integration Examples
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('your-user/linkedin-decision-maker-finder').call({mode: 'enrich_profiles',rows: [{id: 'lead-1',name: 'Jane Doe',company: 'Example Labs',title: 'VP Sales',location: 'London'}],minConfidence: 60,maxResults: 10});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("your-user/linkedin-decision-maker-finder").call(run_input={"mode": "enrich_profiles","queries": ["founder fintech london"],"minConfidence": 60,"maxResults": 10})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/your-user~linkedin-decision-maker-finder/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "match_only","companyUrls": ["https://www.linkedin.com/company/openai/"],"currentTitleKeywords": ["founder", "ceo", "cto", "vp", "director"],"minConfidence": 60,"maxResults": 10}'
Recommended First Test
For the safest first production test, use one row with:
- a real full name
- a current company
- a specific current title
- a location if you have it
That produces the clearest confidence signal and makes it easy to inspect whether the selected profile is correct.
Production Push Checklist
Before shipping to the Apify Store:
- verify
README,input_schema.json,.actor/actor.json, and.actor/output_schema.json - run package build, tests, and type-check
- run the live smoke script against the included scenarios
- confirm the final marketplace price points in the Pricing tab
- confirm issue-response expectations and support contact
- check that sample outputs and dataset views render clearly in Apify Console
The package already includes a live smoke helper:
$pnpm --filter linkedin-decision-maker-finder run test:smoke:live