Linkedin Profile Scraper with Email & Company Data (No Cookie) avatar

Linkedin Profile Scraper with Email & Company Data (No Cookie)

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Linkedin Profile Scraper with Email & Company Data (No Cookie)

Linkedin Profile Scraper with Email & Company Data (No Cookie)

LinkedIn Profile Scraper extracts public profile details, job titles, company information, locations, skills, and publicly available emails without requiring browser cookies. Build structured datasets for B2B lead generation, recruiting, prospecting, and market research.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

3 days ago

Last modified

Categories

Share

LinkedIn Profile Scraper — Emails, Company Data and Work History

Linkedin Profile Scraper with Email & Company Data (No Cookie) turns a list of LinkedIn profile URLs or usernames into structured JSON: full name, work history, education, current-company details (domain, industry, headcount, website), and an optional SMTP-verified work email. No LinkedIn login or cookie is required. Every profile is pushed to the dataset the instant it finishes scraping, so results appear in the Output tab in real time. Paste your list of profiles below and start a run to see it in action.

It's an Apify Actor that fetches LinkedIn's public, logged-out "guest view" pages for a list of profile URLs or usernames and parses them into a consistent JSON record per person — identity data, full experience and education history, and current-company enrichment pulled from the person's employer's own LinkedIn company page. No LinkedIn account, password, or session cookie is ever used — it is a pure HTTP scraper that never authenticates. It's built for recruiters, sales and growth teams doing lead enrichment, and developers or AI agents that need structured LinkedIn data without maintaining their own scraping or login infrastructure.

What LinkedIn profile data is publicly available to scrape?

LinkedIn exposes a real subset of a profile through its logged-out "guest view" pages — no sign-in required to load them at all. What isn't in that guest HTML is either behind a hard sign-in wall or only rendered after client-side JavaScript hydration in a real, authenticated browser session.

Data categoryPublic (guest view)Restricted (needs login / hydrated session)
Name, About preview, profile photoYes
Current job title & companyYes
Full work experience & educationYes
Exact follower countYes
Connection countYes, capped at LinkedIn's own "500+" display value
Public posts/articles (used for the Featured section)Yes
Hand-authored headline textYes — only appears after client-side hydration in a signed-in browser
Contact info (email, phone, personal sites)Yes — hard sign-in wall
Full connection list, DMsYes — login plus connection

Linkedin Profile Scraper with Email & Company Data (No Cookie) only returns publicly visible data — what any visitor sees without logging in. Nothing behind a login wall. The optional work-email field is a separate feature: a pattern-generated address verified live over SMTP against the company's own mail server, not something read out of LinkedIn's protected contact-info panel.

Every scraped profile returns identity data, full work history and education, current-company enrichment, network stats, and — when enabled — a verified work email, all in one flat JSON record.

Field nameDescription
fullnameFull display name
first_nameFirst name
last_nameLast name
headlineAlways null — see the note below
aboutThe profile's About/summary text (LinkedIn's own guest preview, truncated)
public_identifierThe handle from /in/<handle>/
usernameSame as public_identifier on success; the raw input value on a failed record
profile_urlCanonical profile URL
profile_picture_urlProfile photo URL
urnNumeric LinkedIn member URN
locationObject: city, country, country_code, full, postal_code
connection_countConnection count (see cap above)
follower_countExact follower count
current_companyCurrent employer name (same value as current_company_name)
current_company_nameCurrent employer name
current_company_urlCurrent employer's LinkedIn company URL (same value as current_company_linkedin_url)
current_company_linkedin_urlCurrent employer's LinkedIn company URL
current_company_domainEmployer's website domain, parsed from their LinkedIn "About" page
current_company_websiteEmployer's full website URL
current_company_descriptionEmployer's public description
current_company_industryEmployer's industry
current_company_organization_typeEmployer's organization type (e.g. Nonprofit, Public Company)
current_company_headquartersEmployer's headquarters location
current_company_employee_countEmployer's exact employee count, as a string, when LinkedIn discloses it
current_company_followersEmployer's LinkedIn follower count
current_company_urnEmployer's LinkedIn organization URN
experienceArray of roles: title, company, duration, is_current, start_date/end_date (year only), company_id, company_linkedin_url, company_logo_url
educationArray of schools: school, duration, start_date/end_date (year only), school_id, school_linkedin_url, school_logo_url
featuredArray of the person's public posts/articles: title, description, image_url, social_counts (likes, comments), type, url
emailDiscovered work email — only populated when isEmailRequired is enabled
is_email_validWhether the email was SMTP-verified valid (true/false/null if unverifiable)
is_email_catch_allWhether the company's mail domain accepts any address (true/false/null if unverifiable)
validtrue on a successfully scraped record
successtrue on a successfully scraped record
not_foundtrue if LinkedIn returned a clean "Profile Not Found" page
errorPresent only on a failed record — e.g. blocked_after_retries, invalid_input, http_<code>
inputThe raw value you passed in

Identity and profile fields

fullname, first_name, last_name, about, public_identifier, username, profile_url, profile_picture_url, urn, and location describe who the person is and where they can be found on LinkedIn. ⚠️ headline is always returned as null — LinkedIn's guest pages never ship that hand-authored subtitle in raw HTML; it only appears after client-side JS hydration in a signed-in browser, so no logged-out scraper can return it.

Network, company and email metrics

connection_count and follower_count are the person's own network numbers. The current_company_* fields (name, domain, website, industry, organization type, headquarters, employee count, followers, URN) come from a follow-up fetch of the employer's own LinkedIn company page, cached once per unique company for the whole run. is_email_valid and is_email_catch_all are booleans (or null when SMTP verification couldn't run at all) describing the confidence of the returned email.

🤖 Add-on: Need additional LinkedIn data?

If you need skills, honors, and a broader work-history sweep without email lookup, LinkedIn People Profile Scraper covers that ground for the same no-login, no-cookie access model. For company-first lead lists with verified contact emails on a completely different platform, see Shopify Store Leads Scraper — Emails, Phones & Ratings.

Why not build this yourself?

LinkedIn's official APIs are partner-gated and scoped to data the authenticated member themselves grants access to — they are not a path to looking up an arbitrary third party's public profile the way this Actor does, so there's no meaningful official-API comparison to draw here. Building this in-house means: reverse-engineering the same guest-view HTML and embedded schema.org JSON-LD LinkedIn ships, maintaining a tiered proxy fallback so a single blocked request doesn't kill the whole run, tracking a guest cookie session by hand since LinkedIn's guest pages set them per request, and detecting LinkedIn's secondary "blurred-list" defense (real HTML that silently replaces experience/education text with asterisks) so you don't ship garbage data as if it were real. All of that is already implemented, tested, and maintained here.

The Actor runs entirely on the Apify platform — no separate signup or API key is needed beyond your Apify account.

  1. Open the Actor's page in the Apify Store and click Try for free (or Start, if you already have it saved).
  2. Paste one or more LinkedIn profile URLs or bare usernames into the required urls field — one per line.
  3. Optionally turn on Find & verify a work email (isEmailRequired), or open the Proxy settings section to force a specific proxy tier instead of the automatic default.
  4. Click Start.
  5. Read results from the Dataset tab as JSON or CSV, or open one of the five built-in views — Overview, Experience & Education, Company Data, Email & Contact, or Featured Content.

How to scale to bulk profile extraction

urls is an array (stringList editor), so bulk extraction is the default way this Actor works, not a separate mode — paste as many profile URLs or usernames as you need, one per line, in a single run. Profiles are processed with a fixed internal concurrency of 2 at a time; there is no separate "batch" input to configure.

What can you do with LinkedIn profile data?

  • 🎯 A sales development rep building an outbound list uses current_company_domain and email to reach a prospect directly instead of guessing an inbox.
  • 🧑‍💼 A recruiter sourcing candidates uses experience and education to confirm a person's background matches a role before reaching out.
  • 📊 A market researcher tracking a company's team uses current_company_name, current_company_employee_count, and follower_count across many profiles to gauge a company's public footprint.
  • 🧩 A growth marketer building an enrichment pipeline feeds fullname, current_company_name, and email into a CRM to fill gaps left by other data providers.
  • 🤖 An AI agent or RAG pipeline indexes about, experience, and education as text context so an LLM can answer questions about a person's background without ever touching raw HTML.

By default, every request goes straight to LinkedIn with no proxy at all. If LinkedIn rejects or bot-gates a request, the Actor automatically escalates through three tiers — no proxy → Apify Proxy datacenter → Apify Proxy residential — and, once it reaches residential, stays on residential for every remaining request in the run rather than dropping back down. Each profile page gets up to 5 attempts against this escalation ladder, with a randomized delay of roughly 0.7–1.6 seconds between requests and increasing backoff after each blocked attempt. A guest cookie session is warmed up once per proxy tier and reused across requests. If a profile is blocked on every attempt, the record is returned with error: "blocked_after_retries" rather than left out silently — this is reported distinctly from a genuine "profile not found." If the connection to LinkedIn itself is failing outright (not blocking, but not reaching LinkedIn at all — network or DNS issues), the run stops early after repeated consecutive failures rather than burning through the rest of the input. ⚠️ LinkedIn also runs a softer, second-layer defense on some requests: a normal, non-blocked page can still come back with individual experience or education entries replaced character-for-character with asterisks. The Actor detects this and leaves that entry's fields blank rather than pushing the masked text through as if it were real data.

⬇️ Input

Only one field is required: urls. Everything else is optional.

ParameterRequiredTypeDescriptionExample value
urlsYesarrayOne or more LinkedIn profile URLs or bare usernames to scrape, one per line. Bulk is supported. Company/school URLs are rejected — personal profiles only.["https://www.linkedin.com/in/williamhgates/", "satyanadella"]
isEmailRequiredNobooleanWhen enabled, generates likely work-email candidates from the person's name and their current company's domain, then verifies them live over SMTP (with catch-all detection). Adds extra time per profile. Default: false.true
proxyConfigurationNoobjectProxy tier configuration. By default the Actor uses no proxy and auto-escalates only if LinkedIn blocks a request; set this to force a specific tier (e.g. Residential) from the start instead.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

Example input

{
"urls": [
"https://www.linkedin.com/in/williamhgates/",
"https://www.linkedin.com/in/satyanadella/"
],
"isEmailRequired": true,
"proxyConfiguration": {
"useApifyProxy": false
}
}

⬆️ Output

Results are pushed to the Apify dataset one record per profile, the moment each profile finishes — you don't wait for the whole run to see data appear. Every record uses the same fixed set of keys, whether the profile scraped successfully or failed, so downstream code can rely on one consistent shape. Export the dataset as JSON, CSV, Excel, XML, or RSS directly from the Apify platform, or read it through the API or SDK. Every profile pushed — successful, not-found, or blocked — is charged as one row_result event; the only requests that are never pushed and never charged are ones dropped by the connectivity circuit-breaker described above, since nothing was actually scraped for those.

Example output

{
"about": "Co-chair of the Bill & Melinda Gates Foundation. Founder of Breakthrough Energy...",
"connection_count": 500,
"current_company": "Gates Foundation",
"current_company_description": "The Gates Foundation is a nonprofit fighting poverty, disease, and inequity around the world.",
"current_company_domain": "gatesfoundation.org",
"current_company_employee_count": "1288",
"current_company_followers": 245310,
"current_company_headquarters": "Seattle, Washington",
"current_company_industry": "Philanthropic Fundraising Services",
"current_company_linkedin_url": "https://www.linkedin.com/company/gates-foundation",
"current_company_name": "Gates Foundation",
"current_company_organization_type": "Nonprofit",
"current_company_url": "https://www.linkedin.com/company/gates-foundation",
"current_company_urn": "2724968",
"current_company_website": "https://www.gatesfoundation.org",
"education": [
{
"school": "Harvard University",
"duration": "1973 - 1975",
"start_date": { "year": 1973 },
"end_date": { "year": 1975 },
"school_id": null,
"school_linkedin_url": "https://www.linkedin.com/school/harvard-university",
"school_logo_url": null
}
],
"email": "bill.gates@gatesfoundation.org",
"experience": [
{
"title": "Co-chair",
"company": "Gates Foundation",
"duration": "2000 - Present",
"is_current": true,
"start_date": { "year": 2000 },
"end_date": null,
"company_id": null,
"company_linkedin_url": "https://www.linkedin.com/company/gates-foundation",
"company_logo_url": null
}
],
"featured": [
{
"title": "Why global health is a smart investment",
"description": "Why global health is a smart investment",
"image_url": "https://media.licdn.com/dms/image/featured-thumb.jpg",
"social_counts": { "comments": 214, "likes": 18420 },
"type": "article",
"url": "https://www.linkedin.com/pulse/why-global-health-smart-investment"
}
],
"first_name": "Bill",
"follower_count": 41000000,
"fullname": "Bill Gates",
"headline": null,
"is_email_catch_all": false,
"is_email_valid": true,
"last_name": "Gates",
"location": {
"city": "Seattle",
"country": "United States",
"country_code": "US",
"full": "Seattle, Washington, United States",
"postal_code": ""
},
"not_found": false,
"profile_picture_url": "https://media.licdn.com/dms/image/profile-photo.jpg",
"profile_url": "https://www.linkedin.com/in/williamhgates",
"public_identifier": "williamhgates",
"urn": "urn:li:member:123456789",
"valid": true,
"input": "https://www.linkedin.com/in/williamhgates/",
"username": "williamhgates",
"success": true
}

How does it work?

The Actor loads LinkedIn's public, logged-out "guest view" pages the same way a signed-out visitor's browser would — a browser-impersonating HTTP client, not a headless browser, since these pages are plain server-rendered HTML. It parses two sources on each page: an embedded schema.org JSON-LD block LinkedIn ships for search engines (the highest-fidelity source for name, exact follower count, and job/education history), and structural DOM parsing for whatever that JSON-LD doesn't carry, like exact dates. If LinkedIn rejects or bot-gates a request, the Actor automatically routes around it by escalating through no-proxy, datacenter, and residential proxy tiers rather than failing the run. Only data that's genuinely publicly visible on the page is ever returned — nothing is guessed to fill a gap. Because the output schema is fixed by this Actor's own parsing logic rather than mirrored 1:1 off LinkedIn's page structure, the field names and shape you build against stay stable even as LinkedIn tweaks its layout.

Integrations

Linkedin Profile Scraper with Email & Company Data (No Cookie) runs on the Apify platform, so it works with anything that can call an Apify Actor: the REST API, official SDKs, an MCP server for AI agents, or no-code automation tools.

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("linkedin-profile-scraper-with-email-and-company-data").call(
run_input={
"urls": ["https://www.linkedin.com/in/williamhgates/"],
"isEmailRequired": True,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["fullname"], item["current_company_name"], item.get("email"))

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

MCP integration for AI agents

This Actor is reachable through Apify's Actors MCP Server, which exposes any Apify Actor as a callable tool to MCP-compatible clients such as Claude Desktop, Claude Code, and Cursor:

npx -y @apify/actors-mcp-server --actors linkedin-profile-scraper-with-email-and-company-data

Point your MCP client at that server and it can call this Actor, pass it a list of profile URLs, and read back the dataset directly inside the agent's context.

No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node (or a plain HTTP Request node) pointed at this Actor's run endpoint to trigger a scrape as a workflow step. In Make, the Apify app's "Run Actor" module starts a run and passes results into the rest of your scenario. In LangChain, ApifyActorsTool wraps this Actor's technical name so an agent can call it directly and receive dataset items as tool output.

Scraping publicly available LinkedIn profile data is generally lawful — the data returned by this Actor is limited to what LinkedIn already shows any signed-out visitor, not anything behind a login wall. Because a LinkedIn profile plus an inferred email address is personal data, GDPR (if you or your data subjects are in the EU/UK) and CCPA (for California residents) govern how you may store, process, and use it — you need a lawful basis for holding it and must honor deletion and access requests. Consult legal counsel if your use case involves bulk storage of personal data.

Frequently asked questions

What LinkedIn profile fields does this scraper return?

The top fields are fullname, current_company_name, experience, education, and follower_count, alongside dozens more identity, company, and network fields — see the full field table above.

Does this scraper require a LinkedIn account or login?

No. It only reads LinkedIn's public, logged-out guest-view pages and never authenticates — no cookie, password, or session is used at any point.

How many profiles can I extract in one run?

As many as you paste into urls — it's an array input with no fixed maximum. Profiles are processed with an internal concurrency of 2 at a time.

What happens if a profile is private or doesn't exist?

The Actor detects LinkedIn's own "Profile Not Found" page and returns a record with not_found: true, success: false, and valid: false — this is reported separately from a blocked/bot-gated request, which instead comes back with error: "blocked_after_retries" so you can tell the two failure modes apart in code.

Can I scrape multiple LinkedIn profiles at once?

Yes — urls accepts a list, so pasting multiple URLs or usernames (one per line) scrapes all of them in a single run.

No. It never asks for or uses any LinkedIn cookie — every request goes through LinkedIn's public guest-view pages, which is what makes login-free operation possible in the first place.

Does it work with Claude, ChatGPT, and other AI agent tools?

Yes. It's reachable through Apify's Actors MCP Server for MCP-compatible clients, and callable as a standard HTTP endpoint by any agent framework that can make a request.

Does it return data in a format LLMs can use directly?

Yes — typed, normalized JSON with consistent field names across every run. No HTML parsing or CSS selectors required; pass records directly to an LLM, index them into a vector store, or feed them to an agent tool.

What happens when LinkedIn changes its layout or anti-bot system?

The Actor is actively maintained, and its output schema is designed to stay stable across LinkedIn layout changes since the field names come from this Actor's own parsing logic, not a 1:1 mirror of LinkedIn's page structure.

Can I use this without managing proxies or browser infrastructure?

Yes. Proxy selection and escalation (no proxy → datacenter → residential) and guest session handling are all managed automatically — you don't need to supply, rotate, or configure your own proxies unless you want to force a specific tier.

Which fields work best for AI training data and RAG indexing?

For RAG, index about, experience, and education — the highest-information free text and structured history. For training data, fullname, current_company_name, follower_count, and connection_count are the most consistently structured fields across records, all returned as typed primitives rather than free text.

ScraperWhat it extracts
LinkedIn People Profile ScraperSkills, honors, and full experience/education, no-login, without email lookup
Naukri Job Scraper — India + Gulf, Emails & 41 FieldsJob postings from Naukri.com and Naukrigulf.com with employer email enrichment
Shopify Store Leads Scraper — Emails, Phones & RatingsBusiness leads with verified contact emails, phones, and ratings
Twitter X Profile ViewerPublic X/Twitter profile bio, stats, and pinned tweets, no login required

Your feedback

Found a bug or missing a field? Let us know at dev.scraperengine@gmail.com — reports and feature requests are read and actioned directly.