LinkedIn Decision-Maker Finder avatar

LinkedIn Decision-Maker Finder

Pricing

Pay per usage

Go to Apify Store
LinkedIn Decision-Maker Finder

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

Netdesignr

Maintained by Community

Actor stats

1

Bookmarked

33

Total users

22

Monthly active users

7 days ago

Last modified

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 + title to 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_only Use this when you only need the best LinkedIn profile match.
  • enrich_profiles Use this when you also want structured public profile fields.
  • enrich_profiles_and_contacts Use this when you also want public email and phone discovery from the company website.

2. Pick your input style

  • queries Best for broad discovery and list building.
  • rows Best for CSV, Clay, CRM, and lead-enrichment jobs.
  • peopleSearchUrls Best when you already have a LinkedIn people search to convert into export-ready output.
  • companyUrls Best for company-to-decision-maker discovery.
  • linkedinProfileUrls Best when you already know the exact public LinkedIn profile URL and want the most deterministic path.

3. Set your confidence threshold

  • 55-65 Good default range for most prospecting workflows.
  • 70+ Better when you want fewer but safer matches.
  • under 55 Better 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-match record
  • status usually matched
  • high matchConfidence
  • explicit matchReason and matchReasonCodes

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, and skills
  • 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, and phoneConfidence
  • 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:

FieldValue
statusmatched_and_enriched
sourceTypeprofile_url
matchConfidence100
matchReasondirect_profile_url
linkedinProfileUrlhttps://www.linkedin.com/in/mihai-diaconita
fullNameMihai Diaconita
inputCompanyNetdesignr
headlineat Netdesignr
currentCompanyat Netdesignr
billing.matchedResultBilledtrue
billing.profileEnrichmentBilledtrue

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 linkedinProfileUrl is 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: 100 and matchReason: direct_profile_url can be used as safe routing rules
  • matched_and_enriched shows 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

  • mode match_only, enrich_profiles, or enrich_profiles_and_contacts
  • maxResults hard cap on returned matched rows
  • minConfidence threshold from 1-100
  • deduplicateResults removes duplicate profile URLs inside each row’s candidate set

Search and matching hints

  • location
  • seniority
  • currentCompany
  • currentTitleKeywords
  • industry
  • companySize

Enrichment toggles

  • includeExperience
  • includeEducation
  • includeSkills
  • includeContacts

Operational controls

  • emptyRunPolicy retry_then_fail, retry_then_warn, or retry_then_succeed

Output Contract

Each input row returns one of these statuses:

  • matched
  • matched_and_enriched
  • matched_and_partially_enriched
  • unmatched
  • failed

Important output fields

FieldWhat it means
inputRowIdStable row identifier for your workflow
matchConfidence0-100 confidence score
matchReasonHuman-readable explanation of why the profile was selected
matchReasonCodesMachine-friendly reason codes
linkedinProfileUrlBest matched LinkedIn profile URL
fullNameMatched profile name
headlineCurrent headline or summary line
currentTitleCurrent title when available
currentCompanyCurrent company when available
companyWebsiteDiscovered company site when available
email / phonePublic contact data when available
failureReasonWhy the row was unmatched or failed
billingWhich 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_META
  • RUN_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-scraper at $10 / 1,000 results
  • far below the directly named piotrv1001/linkedin-decision-maker-finder at from $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 ApifyClient
import os
client = 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().items
print(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
}'

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