LinkedIn Profile Search — by Name, Job Title or Company
Pricing
from $6.50 / 1,000 profile returneds
LinkedIn Profile Search — by Name, Job Title or Company
Search LinkedIn profiles by name, job title, or company. Returns matching profiles with full data. Fast, embedded API — no setup, no cookies.
Pricing
from $6.50 / 1,000 profile returneds
Rating
0.0
(0)
Developer
EndSpec
Maintained by CommunityActor stats
1
Bookmarked
91
Total users
15
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn Profile Search — Find LinkedIn Profiles by Name, Job Title or Company
Simple Input-Output Example
Input:
{"query": "Software Engineer Google","count": 10}
Output (one dataset row per matching profile):
{"url": "https://www.linkedin.com/in/sundarpichai","title": "Sundar Pichai - CEO at Google | LinkedIn","description": "CEO at Google · Mountain View, CA","_query": "{\"name\":\"Software Engineer Google\"}"}
Important Notes:
- You get results instantly — no cookies, no login, no proxy setup
- Pay only per profile returned — zero results or a failed run costs you nothing
- Returns up to 50 profiles per run, from one search query per run
- Every row is
url+title+description— see Output Structure before you build on it - All data comes from public sources only
- Contact: contact@endspec.net
Full Actor Documentation
LinkedIn Profile Search
Search LinkedIn profiles by name, job title, or company — and get results in seconds. Feed the actor a plain-text query and it returns matching public LinkedIn profiles as clean, structured dataset rows ready for your CRM, spreadsheet, or enrichment pipeline.
Overview
LinkedIn Profile Search is an Apify Actor that runs a people search against public LinkedIn profiles and returns each match as a structured row. You give it a free-text query — a person's name, a job title, a company, or any combination of the three — and it returns the profile URL plus a readable title and description line for every match it finds.
It is built for recruiters, sales teams, lead-generation workflows, and market researchers who need to turn a search phrase into a list of LinkedIn profile URLs without running a browser, managing cookies, or maintaining a scraper.
What this actor does not do: it does not log in, it does not return private or connection-gated fields, it does not return emails or phone numbers, and it does not enrich a profile beyond the fields listed in Output Structure. It is a search actor — it finds profiles, it does not deep-scrape them.
What You Can Do
- Search by name: find the public profile URL for a person you can name
- Search by job title: pull profiles matching a role such as
Product Manager - Search by company: pull profiles associated with a company name
- Combine all three:
"query": "Jane Smith Data Scientist Stripe"narrows to a specific person at a specific company - Build prospect lists: return up to 50 profiles per run and export as JSON, CSV, or Excel
- Feed a pipeline: use the
urlfield as the stable key for downstream enrichment or CRM import
Data Availability
All data returned by this actor is publicly available information. It only surfaces profile details that LinkedIn members have chosen to make publicly visible on their profiles. No login-gated, connection-gated, or private data is accessed, and no contact details are extracted.
Actor Input Parameters
The actor accepts the following input parameters:
query
• Type: string
• Required: Technically optional in the schema — but always provide it (see Important Notes)
• Default: none (the Apify console pre-fills Software Engineer Google)
• Description: The people-search phrase. A name, job title, company, or any combination.
e.g., Software Engineer Google, Jane Smith, Head of Marketing Stripe
count
• Type: integer
• Required: Optional
• Default: 10 (schema default applied by the Apify console)
• Minimum: 1 — Maximum: 50
• Description: The maximum number of profiles to return. The actor stops once it has this many results, or earlier if the search runs out of matches.
e.g., 25
Important Notes:
- Always set
query. The input schema does not mark it as required, so a run submitted without it (for example via the API) will not fail with a validation error — it will run a meaningless search and return junk or nothing. Treatqueryas mandatory. countis a ceiling, not a promise. If the search has fewer matches than you asked for, you get fewer rows. This is normal and you are only charged for the rows you actually receive.countis capped at 50 by the input schema. One run = one query = at most 50 profiles.- Omitting
countfrom an API call is not the same as leaving it blank in the console. The console applies the schema default of10. A raw API call that omits the field entirely falls back to the actor's internal default of50. Set it explicitly if the number matters to your budget. - Broader queries return broader matches.
Software Engineermatches an enormous population;Software Engineer Googleis far more useful. Add qualifiers rather than relying on the result count to filter for you.
Input Examples
Example 1: Search by Job Title and Company
{"query": "Software Engineer Google","count": 10}
When to use: The standard lead-generation case — find people in a given role at a given company.
Example 2: Search for a Specific Person
{"query": "Sundar Pichai","count": 5}
When to use: When you know the person's name and want their public profile URL. Keep count low — a name search rarely needs 50 rows, and you pay per row.
Example 3: Maximum Result Set for List Building
{"query": "Head of Marketing SaaS","count": 50}
When to use: Building a prospect list from a broad role query. 50 is the maximum the input schema accepts.
Example 4: Query Omitted (Error-Prone — Do Not Do This)
{"count": 10}
Result: The run does not fail with a validation error. Because query is not marked required in the schema, the actor performs a search with no meaningful term and will return unusable rows or an empty dataset. Always include query.
Output Structure
The actor writes results to the Apify dataset, one row per matching profile. You can download the dataset as JSON, CSV, Excel, or XML from the Apify console, or fetch it through the Apify API.
Successful Output Format
Every returned profile follows this structure:
{"url": "string","title": "string","description": "string","_query": "string"}
Field Descriptions:
url
• Type: string
• Description: The public LinkedIn profile URL. This is the stable identifier to key on downstream. Empty string ("") if the match carried no URL.
title
• Type: string
• Description: A readable label composed as <Full name> - <Headline> | LinkedIn. If the profile has no headline, the format collapses to <Full name> | LinkedIn.
description
• Type: string
• Description: The profile's headline and location joined by ·. Either half may be absent — if the profile has only a headline you get just the headline; if it has neither, this is an empty string ("").
_query
• Type: string
• Description: A JSON echo of the search this run performed, e.g. {"name":"Software Engineer Google"}. Present on every row (success and error) so you can trace a row back to its input when merging datasets from several runs.
Note on status: successful rows do not carry a status field. Only error rows do, and its value is always "error". To detect failure, check for the presence of status — do not look for status: "success", because the actor never emits it.
Error Output Format
When the run cannot complete the search, the actor writes a single error row instead of profile rows:
{"status": "error","_query": "string","error": "string"}
status
• Type: string
• Description: Always the literal "error". Present only on error rows.
error
• Type: string
• Description: A human-readable explanation. For an upstream capacity problem this is the fixed message shown in Example 4 below. For other failures it is a diagnostic string that begins with Our servers returned HTTP <code>: and may carry a short technical detail after the colon.
You are never charged for an error row. The profile-returned event fires only for rows that contain an actual profile.
Output Examples
Example 1: Full Result — Headline and Location Present
{"url": "https://www.linkedin.com/in/sundarpichai","title": "Sundar Pichai - CEO at Google | LinkedIn","description": "CEO at Google · Mountain View, CA","_query": "{\"name\":\"Software Engineer Google\"}"}
Both halves of description are populated and title carries the headline.
Example 2: Partial Result — No Location
{"url": "https://www.linkedin.com/in/sample","title": "Alex Rivera - Software Engineer at Google | LinkedIn","description": "Software Engineer at Google","_query": "{\"name\":\"Software Engineer Google\"}"}
The profile has no public location, so description contains the headline alone — no · separator.
Example 3: Minimal Result — Name Only
{"url": "https://www.linkedin.com/in/jdoe","title": "Jordan Doe | LinkedIn","description": "","_query": "{\"name\":\"Jordan Doe\"}"}
The profile publishes no headline and no location. title collapses to <Full name> | LinkedIn and description is an empty string. The url is still usable.
Example 4: Upstream Busy — Fixed Error Message
{"status": "error","_query": "{\"name\":\"Software Engineer Google\"}","error": "Our servers are busy right now — please retry shortly. You were not charged."}
Emitted when capacity is temporarily exhausted. Re-run in a few minutes. No charge.
Example 5: Other Failure — Diagnostic Error Message
{"status": "error","_query": "{\"name\":\"Software Engineer Google\"}","error": "Our servers returned HTTP 403: …"}
Any non-capacity failure produces a message in this form. The text after the colon is a short technical detail and its exact content varies — do not pattern-match on it. Check for the presence of status instead. No charge.
Example 6: No Results Found (Successful Run, Empty Dataset)
[]
If the search matches nothing, the run succeeds with an empty dataset — there is no "not found" row and no status field to inspect. An empty dataset means zero matches. No charge. If this surprises you, the query was probably too narrow or misspelled; see Best Practices.
Use Cases
For Recruiters and Talent Sourcers
Candidate Sourcing: Turn a role-and-company phrase into a list of public LinkedIn profile URLs for a shortlist, then work them in your ATS.
Example Workflow:
- Define the target role and employer, e.g.
Senior Backend Engineer Datadog - Run the actor with
countset to your shortlist size - Export the dataset as CSV
- Import the
urlcolumn into your ATS or sourcing sheet - Review each profile and prioritize outreach
For Sales and Lead Generation Teams
Prospect List Building: Find decision-makers by title at accounts you already target, and attach a profile URL to every account record.
Example Workflow:
- List your target accounts
- Run the actor once per account with a query such as
VP Sales <company> - Merge the datasets —
_querytells you which account each row came from - Push
urlandtitleinto your CRM as the prospect's profile link and role snapshot - Route to the SDR team for sequencing
For Marketers and Agencies
Audience Research: Map who actually holds a given title across a segment of companies, and use description as a fast read on seniority and geography.
Example Workflow:
- Pick the persona you are targeting, e.g.
Head of Growth fintech - Run the actor with
count: 50 - Scan the
descriptioncolumn for role and location patterns - Refine your ICP and messaging from what you find
For Researchers and Analysts
Labor-Market Mapping: Sample public profiles for a role or employer and analyze headline and location distributions.
Example Workflow:
- Run the actor across a set of role queries
- Aggregate the datasets
- Split
descriptionon·to separate headline from location - Chart role and geography distributions across the sample
For Developers
Pipeline Integration: Call the actor from your application, then key downstream enrichment on the url field.
Example Workflow:
- Trigger the actor via the Apify API with your
queryandcount - Poll for run completion and fetch the dataset
- Check each row for a
statusfield — its presence means the row is an error, not a profile - Deduplicate on
urland store - Hand the URLs to your enrichment or scoring step
Best Practices
Writing Good Queries
- Add qualifiers, don't widen
count—Product Manager AirbnbbeatsProduct Managerwithcount: 50. The result count does not filter for relevance. - Spell company names as LinkedIn shows them — the query is matched as text, so a misspelled employer returns nothing.
- One query per run — the actor takes a single
query. To cover several roles or accounts, run it once per query and merge the datasets using_query. - Start small — test with
count: 5before committing tocount: 50across many runs.
Handling Results
- Detect errors by the presence of
status, not bystatus: "success"— successful rows have nostatusfield at all. - Never pattern-match on
errortext — only the capacity message is fixed. Other messages vary. - Treat an empty dataset as "no matches" — a successful run with zero rows is a valid outcome, not a failure.
- Expect fewer rows than
count— this is normal when the search runs out of matches. - Key on
url, nottitle—titleis a composed display string and its shape changes when a profile has no headline. - Handle empty strings —
url,title, anddescriptioncan each be""when the underlying profile is sparse. - Log the Apify run ID — include it if you contact support.
Data Usage
- Verify before acting — public profiles change; a headline captured today may be stale next month.
- Respect privacy — use profile data for legitimate business purposes only.
- Follow anti-spam and data-protection law — GDPR, CAN-SPAM, and local equivalents apply to how you use what you collect.
- Honor opt-outs — remove people who ask to be removed from your lists.
Cost, Performance, and Limits
Pricing model: pay per event. The actor charges one profile-returned event for each profile row written to the dataset. The launch price is $0.0070 per profile returned — check the actor's Pricing tab for the current rate, which is authoritative.
You are not charged for:
- Runs that return zero matches (empty dataset)
- Error rows of any kind
- Any row that is not an actual profile
Performance:
- Results are returned in seconds — there is no browser, no page rendering, and no proxy negotiation.
- Results are fetched in pages of 10, so a run makes at most
ceil(count / 10)upstream requests —count: 10is one request,count: 50is five. - Runs are lightweight; the default memory allocation is sufficient.
Limits:
- One search query per run.
- Maximum 50 profiles per run (input-schema cap).
- No pagination beyond 50 — to go deeper, narrow the query rather than trying to page further.
- Fields are fixed —
url,title,description,_query. The actor does not return emails, phone numbers, connection counts, work history, or profile photos. - Capacity is shared — during a burst you may receive the busy error row. Re-run shortly; you were not charged.
Data Sources and Legality
All data returned by this actor is publicly available information that LinkedIn members have made publicly visible on their profiles. The actor does not log in, does not bypass access controls, and does not return private, connection-gated, or contact information.
What this means:
- Every field returned is already publicly visible on the profile
- No credentials, cookies, or session tokens are involved
- No private or restricted data is accessed
Your responsibility: you are responsible for complying with all applicable laws, regulations, and terms of service in your jurisdiction when collecting and using this data — including GDPR, CCPA, and any anti-spam rules that govern your outreach. Personal data of EU/UK residents carries obligations regardless of whether it was published publicly. This README is not legal advice; if your use case is sensitive, take advice before you run at scale.
Frequently Asked Questions
Q: Why do my successful rows have no status field?
A: By design — the actor only sets status on error rows, where it is always "error". Check whether status exists rather than testing for status: "success", which the actor never emits.
Q: I asked for 50 profiles and got 12. Why?
A: count is a maximum. The search had 12 matches. You were charged for 12.
Q: My run finished successfully but the dataset is empty. Is that an error? A: No. Zero matches is a successful outcome with an empty dataset and no charge. Usually the query is too narrow or a name is misspelled — broaden it or check the spelling.
Q: Can I search multiple names or companies in one run?
A: Not in a single run — the actor takes one query. Run it once per query and merge the datasets; the _query field on every row tells you which run produced it.
Q: Can I get email addresses or phone numbers?
A: No. This actor returns url, title, and description only. It is a profile-search actor, not a contact-enrichment actor.
Q: Why is description sometimes empty?
A: It is built from the profile's headline and location. If the profile publishes neither publicly, the field is an empty string. The url is still valid.
Q: What does the title field actually contain?
A: A composed display string: <Full name> - <Headline> | LinkedIn, collapsing to <Full name> | LinkedIn when there is no headline. It is for display — key your data on url.
Q: I got "Our servers are busy right now". What do I do? A: Wait a few minutes and re-run. It means capacity was momentarily exhausted. You were not charged.
Q: Do I need LinkedIn cookies, a login, or a proxy? A: No. There is nothing to configure — supply a query and run it.
Q: Can I use this actor commercially? A: Yes. The data is publicly available. You remain responsible for how you use it — see Data Sources and Legality.
Q: How fresh are the results? A: They reflect the profiles as currently published. Because people update their profiles, re-run periodically for lists you rely on.
Contact & Support
Questions? Need help? We're here for you.
For questions, technical support, feature requests, or any inquiry about LinkedIn Profile Search, reach out:
Email: contact@endspec.net
Response Time: We respond within 24 hours on business days.
What to include in your inquiry:
- A description of your question or issue
- The Apify run ID (if applicable)
- The exact input you used
- Any
status/errorvalues from the dataset rows - What you expected versus what you received
You can also report issues through the Issues tab on this actor's Apify page.
Related Actors
- YouTube Instant Email Scraper — extract public contact emails from YouTube channels for lead generation.
- YouTube Channel Contacts Extractor — get emails, socials, and website URLs for any YouTube channel instantly.
- Instagram Instant Media Scraper — pull public media data from Instagram profiles.
Last Updated: July 2026