Linkedin Profile Details Scraper + EMAIL (No Cookies Required) avatar

Linkedin Profile Details Scraper + EMAIL (No Cookies Required)

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Linkedin Profile Details Scraper + EMAIL (No Cookies Required)

Linkedin Profile Details Scraper + EMAIL (No Cookies Required)

LinkedIn Profile Details Scraper + Email extracts full profiles without cookies - basic info, complete experience history, education and optional email. πŸ”“ No login and no session risk, ideal for recruiting, sales research and enrichment.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Hub

Scrapers Hub

Maintained by Community

Actor stats

0

Bookmarked

42

Total users

1

Monthly active users

8 days ago

Last modified

Share

πŸ’Ό LinkedIn Profile Details Scraper + EMAIL – No Cookies, No Login Required

The LinkedIn Profile Details Scraper extracts full public profile data β€” including email where it is published β€” from LinkedIn profile URLs or usernames, without requiring cookies, a session token or a logged-in account. Paste a list of profile links, press start, and get back a structured record containing the person's basic information, complete work experience history, education history and, when includeEmail is enabled, any contact address exposed on the profile.

Cookie-based LinkedIn scrapers are fragile by design. They break when a session expires, they put the account whose cookies you borrowed at risk, and they force you to maintain a pool of credentials you would rather not have. This LinkedIn profile scraper works entirely from publicly reachable profile pages, so there is nothing to refresh, nothing to rotate and no account to jeopardise. With 888 runs recorded to date, it is the workhorse option for people who need LinkedIn profile data as a dependable input to a pipeline rather than a one-off experiment.


πŸ“Š What Data Can You Extract with This LinkedIn Profile Scraper?

Each dataset item is one profile. The record has a small set of top-level fields, two of which β€” basic_info and experience β€” carry substantial nested structure.

CategoryFieldsWhat it gives you
πŸ‘€ Identity & headlinebasic_info β†’ fullname, first_name, last_name, headline, public_identifier, aboutWho the person is and how they describe themselves professionally
πŸ“ Location & reachbasic_info β†’ location, follower_count, connection_count, is_influencerWhere they are based and how large their audience is
🏒 Current rolebasic_info β†’ current_company, current_company_url, current_company_urn, top_skillsThe employer they are with now and the skills surfaced on their profile
βœ‰οΈ Contactbasic_info β†’ emailEmail address extracted from the profile description and contact info, when includeEmail is on
πŸ§‘β€πŸ’Ό Career historyexperience (array)Every listed position with title, company, duration, start_date, end_date, is_current, company_linkedin_url, company_logo_url and company_id
πŸŽ“ Educationeducation (array)Each entry with school, degree, degree_name, field_of_study, school_linkedin_url, school_logo_url, school_id, start_date, end_date
πŸ•’ Run metadatascraped_timestamp, url, errorWhen the record was captured, the profile it came from, and an error message if the profile could not be processed
πŸ“… Date partsyear, monthThe components used inside the structured start_date and end_date objects

The field that separates this from a simple contact scraper is experience. Because every position carries a structured start_date and end_date alongside is_current and a company_id, you can compute tenure, detect recent job changes, and join people to companies programmatically β€” none of which is possible from a flat "current title" string.


🌟 Key Features of the LinkedIn Profile Scraper

FeatureDescription
πŸͺ No cookies or login requiredWorks from publicly reachable profile pages, so there is no session token to maintain and no account placed at risk
πŸ“§ Optional email extractionWith includeEmail enabled, the scraper attempts to pull an address from the profile's description and contact information
πŸ”— URLs or usernames acceptedSupply full profile links such as https://www.linkedin.com/in/justinwelsh or bare usernames like justinwelsh
πŸ§‘β€πŸ’Ό Full experience historyReturns every listed position, including grouped multi-role entries at the same company, with parsed start and end dates
πŸŽ“ Structured education recordsSchool, degree, degree name, field of study, school LinkedIn URL, logo and parsed year ranges for each entry
🏷️ Creator signalscreator_hashtags, is_creator and is_influencer flags derived from the profile's "Talks about" topics and follower count
🧩 Structured JSON-LD parsingReads the profile's embedded schema.org Person data as its primary source, which is more stable than CSS-selector scraping alone
🚦 Explicit error fieldProfiles that hit an authentication wall or cannot be parsed return an error value rather than silently producing an empty record
πŸ”€ Automatic proxy rotationRequests route through rotating proxies automatically, keeping batch runs stable without any configuration from you

πŸš€ Why Choose This LinkedIn Profile Scraper?

No cookies means no maintenance and no account risk. Session-based scrapers depend on credentials that expire, get flagged, or belong to an account someone cares about. This LinkedIn profile scraper reads publicly available pages, which removes an entire class of operational failure from your pipeline.

Structured dates, not display strings. Anyone who has tried to parse "Jan 2022 – Present" at scale knows the pain. Each experience and education entry here carries start_date and end_date as objects with year and month components, plus an is_current boolean, so tenure calculations and job-change detection are arithmetic rather than regex.

Company identifiers make joins possible. Every position includes company_id and company_linkedin_url, and education entries include school_id and school_linkedin_url. That means you can link people to organisations reliably instead of fuzzy-matching company name strings that vary by capitalisation and legal suffix.

Failures are visible, not silent. When a profile cannot be reached β€” an authentication wall, a deleted account, a malformed URL β€” the record carries an error message and the url it relates to. Your pipeline can retry or route those deliberately rather than discovering the gap weeks later.


πŸ“₯ Input

The LinkedIn profile scraper takes a list of profile URLs or usernames and a switch for email extraction.

{
"profileUrls": [
{ "url": "https://www.linkedin.com/in/justinwelsh" }
],
"includeEmail": true
}

πŸ”§ LinkedIn Profile Scraper Input Fields

FieldTypeRequiredDefaultDescription
profileUrlsarrayβœ… Yesprefilled with https://www.linkedin.com/in/justinwelshList of LinkedIn URLs (for example https://www.linkedin.com/in/justinwelsh) or usernames (for example justinwelsh). Entered through the request-list source editor.
includeEmailboolean❌ NotrueTry to extract email from the profile description and contact info.

πŸ’‘ Input Examples

Single profile with email extraction

{
"profileUrls": [
{ "url": "https://www.linkedin.com/in/justinwelsh" }
],
"includeEmail": true
}

Batch of profiles for CRM enrichment

{
"profileUrls": [
{ "url": "https://www.linkedin.com/in/justinwelsh" },
{ "url": "https://www.linkedin.com/in/example-person" },
{ "url": "https://www.linkedin.com/in/another-example" }
],
"includeEmail": true
}

Profile data only, skipping the email step

{
"profileUrls": [
{ "url": "https://www.linkedin.com/in/justinwelsh" }
],
"includeEmail": false
}

πŸ“€ Output

Each item is one LinkedIn profile. Below is a real record structure returned by the scraper, trimmed for readability.

{
"basic_info": {
"fullname": "Justin Welsh",
"first_name": "Justin",
"last_name": "Welsh",
"headline": "Writer",
"public_identifier": "justinwelsh",
"profile_url": "https://www.linkedin.com/in/justinwelsh",
"location": { "country": "United States", "city": "N/A", "full": "United States", "short": "N/A" },
"follower_count": 0,
"connection_count": 0,
"current_company": "the saturday essay.",
"top_skills": [],
"email": "N/A"
},
"experience": [
{
"title": "Writer",
"company": "the saturday essay.",
"duration": "Jan 2022 - Present",
"start_date": { "year": 2022, "month": 1 },
"end_date": null,
"is_current": true,
"company_linkedin_url": "N/A",
"company_logo_url": "N/A",
"company_id": "N/A"
}
],
"education": [
{
"school": "The Ohio State University",
"degree": "BSBA",
"field_of_study": "Marketing",
"degree_name": "BSBA",
"start_date": null,
"end_date": null
}
],
"scraped_timestamp": 1786588892479
}

🧾 LinkedIn Profile Output Fields β€” Top Level

FieldTypeDescription
basic_infoobject | nullIdentity, headline, location, audience counts, current company, top skills and email
experiencearray | nullEvery listed position on the profile
educationarray | nullEvery listed education entry
scraped_timestampinteger | nullEpoch milliseconds recording when the profile was captured
urlstring | nullCanonical URL of the scraped profile
errorstring | nullError message, present only when the profile failed to process

🧾 LinkedIn Profile Output Fields β€” Nested Date Objects

FieldTypeDescription
yearβ€”Year component inside a start_date or end_date object
monthβ€”Month component inside a start_date or end_date object

Because error and the data fields are mutually exclusive in practice, filtering your dataset on error IS NULL gives you the clean set, while the error rows give you a retry queue.


πŸ’» How to Use the LinkedIn Profile Scraper (Step by Step)

Step 1: Open the LinkedIn Profile Scraper on Apify

Sign in to Apify and open the LinkedIn Profile Details Scraper Actor. Everything runs on Apify's infrastructure β€” you do not install anything, you do not supply LinkedIn credentials, and you never paste a session cookie anywhere. The Actor page shows an input form, a live run log and the dataset where profile records accumulate.

Step 2: Assemble Your Profile List

Add your targets to the LinkedIn Profile URLs or Usernames field. Both full URLs and bare usernames are accepted, so a column of linkedin.com/in/... links exported from a CRM works as-is, and so does a list of handles. Strip query strings and trailing parameters where you can β€” a clean canonical profile URL is the most reliable input.

Step 3: Decide Whether You Need Email

Leave includeEmail on true if contact extraction is the point of the run. Set it to false when you only need profile and career data β€” for example when you are building an org chart or analysing career paths β€” since skipping the email step means fewer requests per profile and a faster run.

Step 4: Start the Run and Read the Log

Press Start. The log reports progress profile by profile, including any that hit an authentication wall or fail to parse. Requests go out through rotating proxies automatically, so transient blocks are handled without configuration on your side. Larger batches simply take proportionally longer.

Step 5: Separate Successes from Errors

Open the Dataset tab. Records that processed cleanly carry basic_info, experience and education; records that did not carry an error message and the url they relate to. Split these two groups immediately β€” the successes go downstream, the errors go into a retry list to run again later, when a different proxy path may succeed.

Step 6: Flatten the Nested Structure for Analysis

basic_info is an object and experience and education are arrays, which is right for JSON but awkward for spreadsheets. If you are exporting to CSV, decide what shape you need first: one row per person with the current role flattened out, or one row per position for career-path analysis. Both are straightforward from the same dataset.

Step 7: Enrich, Export or Automate

Push the clean records into your CRM, warehouse or ATS. For recurring work, schedule the Actor and attach a webhook so each finished run delivers straight into your own system. Re-running the same profile list periodically and comparing experience[0] gives you a job-change alerting system with very little additional code.


πŸ”Œ API Access & Integrations

Run the LinkedIn profile scraper and receive the dataset in the same request:

curl -X POST "https://api.apify.com/v2/acts/scrapers-hub~linkedin-profile-details-scraper-email-no-cookies-required/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profileUrls": [
{ "url": "https://www.linkedin.com/in/justinwelsh" }
],
"includeEmail": true
}'

The same job with the official Python client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor(
"scrapers-hub/linkedin-profile-details-scraper-email-no-cookies-required"
).call(
run_input={
"profileUrls": [{"url": "https://www.linkedin.com/in/justinwelsh"}],
"includeEmail": True,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("error"):
print("FAILED:", item.get("url"), item["error"])
continue
info = item["basic_info"]
current = item["experience"][0] if item.get("experience") else {}
print(info["fullname"], "|", info["headline"], "|", current.get("company"))

Results can also be routed automatically to Zapier, Make, Google Sheets and Slack, or delivered to any endpoint you control through Apify webhooks triggered on run completion.


πŸ’‘ Best Use Cases for LinkedIn Profile Data

🎯 B2B Sales Prospecting and Lead Enrichment

Turn a list of profile URLs into a qualified prospect file. basic_info.headline, current_company and top_skills give you the personalisation material for outreach, while email β€” when published β€” gives you the channel. Because company_id travels with each position, prospects can be grouped by employer automatically.

πŸ§‘β€πŸ’» Technical and Executive Recruitment

Recruiters can build structured candidate profiles at scale. The experience array with start_date, end_date and is_current supports tenure analysis, which is the single most useful predictor of whether someone is approachable, and education supports credential screening without opening a browser.

πŸ”„ Job Change Detection and Account Monitoring

Re-run the same profile list on a schedule and compare the first entry in experience between runs. A change in company or the appearance of a new is_current position is a high-value trigger for both sales teams tracking champions and recruiters tracking placed candidates.

πŸ—ΊοΈ Org Chart and Account Mapping

Scraping every known contact at a target account and grouping the results by current_company_urn reconstructs a rough organisational picture. Combining headline with experience tenure shows seniority and how recently each person joined, which shapes who to approach first.

πŸ“š Talent Market and Career Path Research

Analysts studying a talent pool can aggregate education.field_of_study, experience.title sequences and company transitions across thousands of profiles to see how careers actually progress in a discipline. Structured dates make cohort analysis possible rather than approximate.

🌟 Creator and Thought-Leadership Analysis

The creator_hashtags, is_creator and is_influencer signals in basic_info, alongside follower_count, identify people with genuine reach on the platform. Marketing teams use this to build partner shortlists rather than guessing influence from job title.

🧹 CRM Hygiene and Contact Verification

Contacts in a CRM go stale quickly as people move roles. Running your existing contact list through the scraper and comparing current_company against your stored value flags every record that needs updating, and error rows flag profiles that no longer exist.


βš™οΈ Tips for Better LinkedIn Profile Scraping Results

  • Use canonical profile URLs. A clean linkedin.com/in/username link is the most reliable input. Strip tracking parameters, locale prefixes and trailing segments before submitting.
  • Batch in moderate sizes. Very large single runs take a long time and are harder to resume. Several hundred profiles per run, scheduled in sequence, is more manageable than one run of many thousands.
  • Turn off includeEmail when you do not need it. The email step involves additional work per profile. If your use case is career-data analysis, disabling it makes runs noticeably quicker.
  • Always handle the error field. Build your pipeline to branch on error from the outset. Retrying failed profiles in a later run recovers a meaningful proportion of them.
  • Expect N/A rather than nulls in nested fields. Where a value is genuinely absent on the profile, nested fields commonly carry the string N/A. Normalise these to nulls during ingestion so downstream logic behaves predictably.
  • Do not assume email is present. Most LinkedIn profiles do not publish an address at all. Email is a bonus when it appears, not a field you can build a workflow around requiring.
  • Re-scrape periodically for freshness. Profile data ages. For monitoring use cases, a monthly refresh keeps current_company and experience meaningful.

πŸ› οΈ Troubleshooting

A profile returned an error instead of data. The most common cause is an authentication wall being served instead of the public profile. This is transient and proxy-dependent β€” collect the failed URLs and re-run them as a smaller batch, which typically recovers most of them.

The email field says N/A for every profile. That is the expected outcome for the majority of profiles. Email is only extracted where an address is actually published in the profile description or contact information, and most people do not publish one. Confirm includeEmail is true, but do not expect a high hit rate.

follower_count or connection_count came back as zero. These counts are parsed from the profile's visible text, which is not always rendered on the public version of a page. A zero here means the value was not present in what was served, not that the person has no connections.

Experience entries are missing dates. start_date and end_date are parsed from the duration text on each position. Where a profile lists a role without dates, or in a format that cannot be parsed, those fields will be null while duration still carries the raw string.

The run is slow on large profile lists. Each profile requires its own request, and enabling email extraction adds more. Reduce batch size, disable includeEmail where it is not needed, and raise the run timeout in Run Options for genuinely large jobs.


❓ Frequently Asked Questions About LinkedIn Profile Scraping

Does this LinkedIn profile scraper really work without cookies? Yes. It reads publicly reachable profile pages and does not require a session cookie, a login, or any LinkedIn credentials. There is nothing to refresh and no account exposed.

What data does the scraper return for each profile? A basic_info object with identity, headline, location, audience counts, current company, top skills and email; an experience array covering the full listed career history; an education array; plus url and scraped_timestamp metadata.

Can I pass usernames instead of full URLs? Yes. The profileUrls input accepts both full LinkedIn URLs such as https://www.linkedin.com/in/justinwelsh and bare usernames such as justinwelsh.

How reliable is the email extraction? It finds addresses only where they are actually published on the profile β€” in the description or contact information. Most profiles do not publish an address, so treat email as an occasional bonus rather than a guaranteed field.

Can I disable email extraction? Yes, set includeEmail to false. Runs complete faster without it, which is worth doing when you only need career and education data.

How many profiles can I scrape in one run? There is no fixed cap in the input schema. Practical limits come from run duration, so moderate batches of a few hundred profiles, scheduled in sequence, work better than one enormous run.

Are the experience dates structured or just text? Both. Each position carries a human-readable duration string plus structured start_date and end_date objects with year and month components, and an is_current boolean.

Can I link people to companies programmatically? Yes. Every experience entry includes company_id and company_linkedin_url, and education entries include school_id and school_linkedin_url, so joins do not depend on matching name strings.

What happens when a profile cannot be scraped? The record carries an error message alongside the url it relates to, rather than being silently dropped. Filter on error to build a retry queue.

Does the scraper need proxies configured? No. Proxy rotation is handled automatically, which is what keeps batch runs stable without any setup on your side.

Does it use a headless browser? No. It works from HTTP requests and parses the profile's embedded schema.org structured data along with the page HTML, which keeps runs fast and resource-light.

Can I detect when someone changes jobs? Yes. Re-run the same profile list on a schedule and compare the current position β€” the first entry in experience, or the entry where is_current is true β€” between runs. Any change is a job-change signal.

What export formats are available? Apify datasets export as JSON, CSV, XLSX, XML, RSS and HTML. JSON is recommended here because of the nested basic_info, experience and education structures.

Can I schedule the LinkedIn profile scraper? Yes. Apify's scheduler runs the Actor on any cron expression, and webhooks can deliver each finished run to your CRM, warehouse or internal service automatically.

Is scraping public LinkedIn profile data lawful? Collecting publicly available information is generally permitted in many jurisdictions, but processing personal data is separately regulated. You must have a lawful basis under the GDPR or equivalent legislation, and you must comply with LinkedIn's terms of service. Take your own legal advice for your specific use case.


πŸ†˜ Support & Feedback

If a profile is failing consistently or output looks wrong, please open a ticket on the Issues tab of this Actor and include the run ID plus an example profile URL. Reports filed there are tracked and resolved fastest.

Need extra fields, a flattened output shape, higher-volume batch processing, or a custom LinkedIn data pipeline built into your ATS or CRM? Email scraperhubapi@gmail.com with your requirements.

If this LinkedIn profile scraper is useful to you, please leave a review on the Actor page. Ratings and written feedback shape what gets improved next.


βš–οΈ Disclaimer

This LinkedIn profile scraper collects only publicly accessible information from public profile pages. It does not log in, use cookies or session tokens, bypass authentication, access private profiles, or retrieve anything hidden behind a login wall.

You are responsible for how you use the data. LinkedIn profile records are personal data by definition, so if you process them under the GDPR, the UK GDPR, the CCPA or comparable privacy legislation you must establish a lawful basis, provide transparency to data subjects where required, honour access, rectification and erasure requests, apply proportionate retention limits, and keep the data secure. If you use extracted email addresses for outreach, additional rules under PECR, CAN-SPAM and equivalent regimes apply β€” identify yourself clearly, include a working opt-out, and honour suppression requests immediately.

Respect LinkedIn's terms of service and comply with all applicable employment, recruitment and data-protection laws in your jurisdiction. Data appearing in these results means it was published on a public profile, not that its subject consented to its use for your purpose.

If you believe your personal data has been collected through this Actor and you would like it removed, contact scraperhubapi@gmail.com and we will action the request.