LinkedIn Profile Scraper - No Login, JSON & CSV
Pricing
from $4.00 / 1,000 results
LinkedIn Profile Scraper - No Login, JSON & CSV
Scrape public LinkedIn profiles from URLs or usernames. Extract names, headlines, company, experience, education and skills to JSON or CSV. No account cookies required.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
Anas Nadeem
Maintained by CommunityActor stats
0
Bookmarked
38
Total users
7
Monthly active users
7 days ago
Last modified
Categories
Share
Turn LinkedIn profile URLs or usernames into structured profile data for CRM enrichment, recruiting research, and spreadsheets. Extract names, headlines, current company, work experience, education, and skills when available. No LinkedIn account or account cookies are required.
Start with a few profiles, inspect the results, then scale your input. Public profile coverage varies; limited records are explicitly marked partial.
Quick start
- Paste profile URLs or usernames into LinkedIn profiles.
- Set Maximum profiles to 5 for an initial coverage check.
- Run the actor and open Profiles or CRM CSV export in the Output tab.
- Check Run summary and Failed profiles before running a larger list.
{"profiles": ["https://www.linkedin.com/in/whoareyouanas/", "neal-mohan"],"maxProfiles": 5,"includeEmail": false,"useUpstreamFallback": false}
This example disables the paid provider fallback so you can evaluate direct public-page coverage. Enable it in the input if you accept the separate child-run costs described below.
Pricing and cost controls
The result fee is $0.004 per usable profile ($4 per 1,000). Both success and partial profiles are billable; a partial profile may contain only a name and headline. Duplicate URLs/usernames are processed once. Failed profiles are stored in DIAGNOSTICS, outside the billed dataset.
| Usable profiles | Result fee |
|---|---|
| 10 | $0.04 |
| 100 | $0.40 |
| 1,000 | $4.00 |
The live listing currently also has an actor-start event of $0.00005 per GB, with a minimum of one event. Check the Pricing tab for the effective rates and platform charges for your run.
Paid fallback costs are separate. When enabled, this actor can call apimaestro/linkedin-profile-detail using the run's Apify token. Each child run is capped at $0.01; the default limit of 10 attempts bounds those requested child-run charge caps to $0.10 per parent run. This is a spending limit, not an estimate or a guarantee of a successful result. The parent run's result-fee limit does not replace these child-run limits. Set useUpstreamFallback: false or maxFallbackProfiles: 0 to avoid child runs. No provider email search is requested.
Input reference
| Field | Default | Behavior |
|---|---|---|
profiles | Required unless an alternative is supplied | Array of profile URLs or usernames; API input also accepts { "url": "..." } entries. |
username | None | Single-profile compatibility input, used when profiles is empty. |
profileUrls | None | API alias, used when both inputs above are empty. |
maxProfiles | 1000 | Process the first N unique profiles, 1–5,000. Excess profiles are not processed. |
includeEmail | true | Include public email from directly parsed data when available; false guarantees basic_info.email is null. |
maxConcurrency | 5 | Parallel profiles, 1–25. Output order may differ from input order. |
requestTimeoutSecs | 20 | Timeout per HTTP request, 5–120 seconds. Guest bootstrap, retries, and fallback add time. |
maxRequestRetries | 1 | Retries for temporary network, blocked, or server responses, 0–3. |
proxyConfiguration | None | Optional Apify proxy settings. Coverage depends on IP and public availability. |
useUpstreamFallback | true | Enable paid third-party recovery; requires an Apify token. |
maxFallbackProfiles | 10 | Maximum child-run attempts across all workers, 0–1,000. |
Tracking parameters are removed for requests. linkedin.com, www.linkedin.com, and two-letter country subdomains are supported. Company, search, and Sales Navigator URLs are not profile inputs. Invalid profile strings fail validation before scraping, instead of being silently discarded.
Output schema and exports
The actor registers an Apify output schema and a separate dataset field schema. The Output tab links to:
| Output | Contents |
|---|---|
| Profiles | One row per usable unique profile, including partial results. |
| CRM CSV export | Name, headline, LinkedIn URL, company, location, public email, status, input, and timestamp. |
| Run summary | Requested/processed/saved counts, status counts, retries, fallback attempts, and budget-stop flag. |
| Failed profiles | DIAGNOSTICS key-value record containing unsuccessful profile rows, with no result fee. |
The default overview preserves nested fields for existing integrations. The profiles dataset view selects columns for CRM/spreadsheet exports. JSON preserves experience and education arrays.
Illustrative abbreviated result; values are examples, not a coverage guarantee:
{"input": "example-person","basic_info": {"fullname": "Example Person","headline": "Software Engineer","profile_url": "https://linkedin.com/in/example-person","public_identifier": "example-person","current_company": "Example Company","location": { "country": "", "city": "", "full": "", "postal_code": "", "country_code": "" },"top_skills": ["TypeScript"],"email": null},"experience": [],"education": [],"certifications": [],"languages": [],"status": "partial","error": null,"scraped_at": "2026-09-12T00:00:00.000Z"}
Other normalized fields include first/last name, about, photo/background URLs, follower and connection counts, company links, education summary, and public profile flags. Missing strings are "", unknown numbers/flags are null, and unavailable lists are []. Fields being present in the schema does not mean LinkedIn will expose them.
success means a structured profile was extracted; it does not certify every field is complete. partial indicates limited metadata. Diagnostics use blocked, not_found, or error. If every attempted profile fails, the run fails with an explanatory message and retains diagnostics. When the result budget is exhausted, processing stops; already-started requests may finish without being saved.
LinkedIn profile API examples
For short runs, return dataset rows directly:
curl --request POST \'https://api.apify.com/v2/acts/whoareyouanas~linkedin-profile-actor/run-sync-get-dataset-items' \--header "Authorization: Bearer $APIFY_TOKEN" \--header 'Content-Type: application/json' \--data '{"profiles":["whoareyouanas"],"useUpstreamFallback":false}'
For bulk runs, use an asynchronous actor run and read its dataset after completion. Python with apify-client:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("whoareyouanas/linkedin-profile-actor").call(run_input={"profiles": ["whoareyouanas", "neal-mohan"],"maxProfiles": 100,"includeEmail": False,"useUpstreamFallback": False,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["basic_info"]["fullname"], item["status"])
JavaScript with apify-client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('whoareyouanas/linkedin-profile-actor').call({profiles: ['whoareyouanas'], useUpstreamFallback: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const summary = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('RUN_SUMMARY');console.log(items, summary?.value);
In n8n, Make, or Zapier, start the actor using an Apify integration or HTTP step, wait for completion, fetch its dataset, and map basic_info.profile_url to your CRM's LinkedIn field. Use the canonical URL as your deduplication key. Inspect diagnostics separately; a completed run does not guarantee every input returned data.
Frequently asked questions
Do I need LinkedIn cookies or a login? No account cookies are required. Direct HTTP requests may use anonymous guest cookies issued by LinkedIn.
Does this find or verify work emails? No. It does not guess addresses, run SMTP checks, or request paid provider email search. Email is usually null and is not a reason to choose this actor over a dedicated email finder.
Does it find people by name or search LinkedIn? No. Supply known profile URLs or usernames. This is a profile extraction API for recruiting research, CRM enrichment, and professional data workflows.
Why are profiles missing or partial? LinkedIn can restrict public fields or return login/rate-limit pages. Inspect diagnostics, lower concurrency, or test proxy settings. The optional provider may also fail. No success-rate or throughput guarantee is made.
How do I report a problem? Open the actor's Issues tab with the run ID, expected fields, and observed status. Do not include tokens or cookies.
Version 0.2 migration
Failed rows now live in DIAGNOSTICS rather than the default dataset, so they no longer incur a result fee. Update workflows that previously looked for failures in dataset rows. Existing successful row fields remain compatible. New limits default to 1,000 unique profiles and 10 paid fallback attempts. Provider email search is disabled. Local source changes must be deployed before these behaviors are available in the live actor.
This independent actor is not affiliated with LinkedIn. Only submit profiles you are entitled to process.