How to Scrape LinkedIn Profiles With No Login or Cookies
Scrape public LinkedIn profiles with no login, no cookies, and zero account-ban risk. Pull name, headline, employers, education, followers and Top Voice badges.
If you want to scrape LinkedIn profiles at any real volume, the thing standing in your way is almost never the data — it’s the account risk. Nearly every LinkedIn people-scraper on the market asks you to paste your session cookie (li_at) or log in with your own account, and the moment you run it at scale, LinkedIn flags that session and restricts or bans the account, often within 3–7 days. This guide covers a fundamentally different approach: reading only the public, logged-out profile page LinkedIn already serves to anonymous visitors. No login, no cookies, no account in the loop — and therefore nothing to flag and nothing to ban.
Why the logged-out page changes everything
LinkedIn serves two very different experiences. The authenticated site — the feed, full profiles, search, connections — sits behind aggressive bot detection that is tuned to spot automation tied to a real account. Scraping that surface with your own credentials is the fast lane to a restriction.
The public profile page is the version LinkedIn hands to anyone who isn’t logged in. Open an incognito window, visit linkedin.com/in/satyanadella, and you’ll see a trimmed but genuinely useful version of the profile: name, headline, location, current and past employers, education, follower count, and badges like Top Voice. That page is server-rendered HTML with structured data baked in. Because it’s meant for anonymous visitors, reading it has a completely different engineering posture:
- No login. You never touch credentials, so there is no account to get banned.
- No cookies, no session. Nothing to export, expire, or rotate.
- No headless browser. The data is in the initial HTML, so a plain HTTP GET plus a parser is enough — no Playwright, no Chromium, no JavaScript runtime. That makes it fast and cheap.
This is the core trade-off to understand up front. You give up the deepest authenticated fields (full connection counts, complete skills lists, private activity) in exchange for zero account risk and stable, cheap, high-volume extraction. For lead enrichment, recruiting, and research, the public fields are almost always the ones that matter.
▶ Run the LinkedIn Profile Scraper — drop in a list of profile URLs or usernames, get back a clean structured people dataset. No login, no cookies, $10 per 1,000 profiles.
What the scraper takes as input
The input is deliberately simple. You give it a list of profiles in the profiles field, and any mix of formats works:
- Full URL —
https://www.linkedin.com/in/satyanadella/ - Bare username —
satyanadella - Country subdomains —
in.linkedin.com/in/...,uk.linkedin.com/in/...and similar are normalised automatically, so you don’t have to clean your list first.
A few optional knobs tune behaviour:
| Option | Default | What it does |
|---|---|---|
profiles | – | Required. Array of profile URLs or usernames. |
includeRecentActivity | true | Capture the member’s most recent public posts/articles. |
maxConcurrency | 8 | How many profiles to fetch in parallel. |
proxyConfiguration | Apify Proxy (auto) | Proxy routing. RESIDENTIAL recommended for very large lists. |
That’s the whole setup. No browser extension, no cookie export, no proxy configuration for typical lists — the default datacenter/automatic proxy is the cheapest and works for most runs.
The exact fields you get back
Every profile becomes one structured record. These are the actual field names the actor emits:
| Field | Type | Example |
|---|---|---|
name | string | "Bill Gates" |
headline | string | "Chair, Gates Foundation and Founder, Breakthrough Energy" |
bio | string | "Chair of the Gates Foundation. Founder of Breakthrough Energy…" |
location | string | "Seattle, Washington, United States" |
country | string | "US" |
followerCount | number | 40381452 |
jobTitles | string[] | ["Co-chair","Founder","Co-founder"] |
currentCompany | string | "Gates Foundation" |
companies | array | [{ name, url, slug, startDate, endDate }] |
education | array | [{ name, url, slug, startYear, endYear }] |
isTopVoice | boolean | true |
isCreator | boolean | true |
badges | string[] | ["Creator","Top Voice"] |
profileImageUrl | string | "https://media.licdn.com/…" |
username | string | "williamhgates" |
linkedinUrl | string | "https://www.linkedin.com/in/williamhgates" |
recentActivity | array | [{ type, title, url, datePublished, likes }] |
scrapedAt | string | ISO timestamp |
Two details are worth calling out because they make downstream chaining easy. First, every entry in companies[] and education[] carries a url and slug — those are clean handles you can feed straight into a LinkedIn Company Scraper to pull full firmographics on every employer. Second, the badge fields (isTopVoice, isCreator, badges) come straight off the public page, which most cookie-based scrapers capture only rarely — that’s what makes influencer and creator discovery viable here.
A realistic output record
A single run on ["williamhgates", "satyanadella", "reidhoffman"] returns rows like this — real fields from a real run, nothing mocked:
{
"name": "Bill Gates",
"headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"bio": "Chair of the Gates Foundation. Founder of Breakthrough Energy…",
"location": "Seattle, Washington, United States",
"country": "US",
"followerCount": 40381452,
"jobTitles": ["Co-chair", "Founder", "Co-founder"],
"currentCompany": "Gates Foundation",
"companies": [
{ "name": "Gates Foundation", "slug": "gates-foundation", "url": "https://www.linkedin.com/company/gates-foundation", "startDate": 2000 },
{ "name": "Microsoft", "slug": "microsoft", "url": "https://www.linkedin.com/company/microsoft", "startDate": 1975 }
],
"education": [
{ "name": "Harvard University", "slug": "harvard-university", "url": "https://www.linkedin.com/school/harvard-university", "startYear": 1973, "endYear": 1975 }
],
"isTopVoice": true,
"isCreator": true,
"badges": ["Creator", "Top Voice"],
"profileImageUrl": "https://media.licdn.com/dms/image/.../profile-displayphoto",
"username": "williamhgates",
"linkedinUrl": "https://www.linkedin.com/in/williamhgates",
"recentActivity": [
{ "type": "article", "title": "…", "url": "…", "datePublished": "…", "likes": 7331 }
],
"scrapedAt": "2026-06-03T10:00:00.000Z"
}
Results stream into your dataset as they’re scraped, and you can export to JSON, CSV, Excel, or HTML, or pull them from the API for a pipeline.
Use cases that actually pay off
This actor is an enrichment tool: you bring identifiers (profile URLs or usernames), and it returns rich structured data. Where that’s worth real money:
Recruiting and sourcing
Enrich a candidate shortlist with current role, full employer history with dates, and education in a single pass — instead of opening 500 tabs by hand. Because employers come back with startDate/endDate, you can compute tenure and seniority programmatically and rank a list by how long someone has been in-role.
Sales lead enrichment
Turn a flat list of profile URLs from your CRM or a search export into structured intelligence: title, current company, seniority, location, and follower reach. Feed it straight into HubSpot, Salesforce, or Pipedrive to refresh stale contact records, or into an outreach tool to personalise sequences. Run it on a schedule and job-change detection falls out for free — a contact whose currentCompany changed is a warm trigger event.
Influencer and creator discovery
Filter on isTopVoice / isCreator and followerCount to surface credible voices in any niche. This is a targeted, pay-per-result alternative to the $1,000/mo influencer databases — you supply the candidate handles, it tells you who actually has reach and a Top Voice badge.
Research and data products
Assemble a structured people dataset for your own app, model, or RAG pipeline. Because the schema is stable and the badges/employer dates are normalised, the output drops cleanly into a warehouse or a fine-tuning corpus.
Reliability and cost
The engine is pure HTTP with automatic session rotation and smart retries: when LinkedIn throttles one session, the actor quietly retries on a fresh one instead of failing your row. Failures are graceful — a wrong username or a removed profile returns a clear error field rather than crashing the whole job, so a 5,000-profile run always finishes. The data is cleaned on the way out: HTML entities decoded, country subdomains normalised, employers and schools returned with start/end dates.
On cost, you pay per result — $0.01 per profile, or $10 per 1,000 profiles, a fraction of the $300–$1,000/mo seat-based data vendors. Because there’s no headless browser burning compute and no residential bandwidth required for typical lists, the per-profile cost stays predictable even at volume. For very large lists, switch proxyConfiguration to RESIDENTIAL to keep throttling down — that’s the one knob that trades a little cost for a higher success rate at scale.
▶ Run the LinkedIn Profile Scraper — enrich thousands of profiles per run with employers, education, followers and Top Voice badges. No login, no cookies, $10 per 1,000 profiles.
FAQ
Does this touch or risk my LinkedIn account?
No — and that’s the whole point. It reads only the public profile page LinkedIn serves to logged-out visitors. Your account is never used, never logged in, and never in the loop, so it can’t be flagged, throttled, or banned. There is no li_at cookie to paste and nothing to rotate.
Is scraping public LinkedIn profiles legal? This collects only publicly visible information — the same data anyone sees without logging in. The hiQ Labs v. LinkedIn line of cases supports access to public data in the US. Because this is personal data, you are responsible for using the output in line with LinkedIn’s terms and the privacy laws (GDPR/CCPA) that apply in your region. The tool does not collect private or login-gated data. This actor is not affiliated with, endorsed by, or sponsored by LinkedIn.
What is NOT covered? Anything that requires being logged in. You won’t get a profile’s full connection list, complete skills/endorsements sections, private activity, or — importantly — employee lists for a company. This actor enriches profiles you already have identifiers for; it does not discover or enumerate the people who work at a company. If you need that direction (company → people), you need a different tool. You’ll get the public surface of each profile, not the authenticated deep view.
Where do I get a list of profile URLs to feed in?
Your CRM, an export from a search tool, your existing connections, or the companies[].url handles returned by a LinkedIn Company Scraper. Remember this is the enrichment step: give it identifiers, get back rich structured data.
How many profiles can I scrape, and what happens to failures?
As many as you want — feed a list of any size and results stream into your dataset, billed per result. If an item comes back with an error field, the username was wrong, the profile is private or removed, or it was throttled after all retries. Re-run just those items, ideally with the RESIDENTIAL proxy.
Do I need to set up proxies or a browser? No. The default Apify Proxy (datacenter/automatic) works out of the box for most lists, and there’s no browser to configure because the engine is pure HTTP. The only optional change is switching to RESIDENTIAL for very large runs.
If your bottleneck has been the account-ban risk of cookie-based tools, the logged-out approach removes it entirely: you can scrape LinkedIn profiles at volume — enriching recruiting shortlists, sales lists, and influencer research — without ever putting an account on the line. Save this guide as how-to-scrape-linkedin-profiles-no-login.mdx and start enriching.
Related guides
Eventbrite API Alternative: Public Event Search After 2019
Eventbrite removed public event search from its API in late 2019. Here is the working Eventbrite API alternative for public event data in 2026.
How to Bulk-Verify Email Deliverability in 2026
A practical guide to validating email lists at scale — syntax, MX/DNS, disposable, role and typo checks — to cut bounce rate and protect sender reputation before outreach.
How to Find Shopify Merchant Leads and Contacts in 2026
A practical guide to extracting B2B leads from Shopify stores — emails, phone numbers, social profiles and store metadata — via direct JSON endpoints with no browser.