How to Scrape LinkedIn Profiles & Jobs in 2026
LinkedIn is the world's largest professional network — and one of the hardest sites to scrape. This guide covers what's possible, what's legal, and how to extract public LinkedIn data without getting your account banned.
Why scrape LinkedIn?
LinkedIn has over 1 billion members and 60 million company pages. The professional data on the platform drives real business value:
- 1Lead generation — Build targeted prospect lists from public profiles and company pages.
- 2Job market analysis — Track hiring trends, salary ranges, and in-demand skills across industries.
- 3Competitor hiring patterns — Monitor which roles competitors are filling to predict their product roadmap.
- 4Recruitment — Source candidates matching specific skills, experience, and location criteria.
The challenge: LinkedIn's defenses
LinkedIn is one of the most heavily protected sites on the internet. Their anti-scraping infrastructure includes:
Public data: what's fair game
Not all LinkedIn data requires a login. Many pages are publicly accessible and indexable by search engines. Focus your scraping efforts here.
What you CAN scrape
- ✓ Public profile pages
- ✓ Company pages
- ✓ Job listings
- ✓ Public posts and articles
- ✓ School/university pages
What you SHOULDN'T scrape
- ✗ Private profile data
- ✗ Connection lists
- ✗ Private messages
- ✗ Email addresses (hidden)
- ✗ Data behind login walls
Method 1: Selenium with login
The brute-force approach: automate a real browser, log into LinkedIn, and navigate to the pages you want to scrape.
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.linkedin.com/login")
# Log in (risks account ban)
driver.find_element(By.ID, "username").send_keys("you@email.com")
driver.find_element(By.ID, "password").send_keys("your_password")
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
time.sleep(3)
# Navigate to a profile
driver.get("https://www.linkedin.com/in/some-person")
time.sleep(5)
# Extract data
name = driver.find_element(By.CSS_SELECTOR, "h1").text
headline = driver.find_element(By.CSS_SELECTOR, ".text-body-medium").text
print(f"{name} — {headline}")
# WARNING: LinkedIn detects automation and will ban your account
driver.quit()Why this is risky
- LinkedIn detects Selenium and similar automation tools. Your account will likely be suspended.
- Logging in and scraping violates LinkedIn's Terms of Service more directly than scraping public pages.
- Storing LinkedIn credentials in scraping scripts is a security risk.
- LinkedIn can pursue legal action against authenticated scraping.
Method 2: SnapRender API (public data only)
The safer approach: render publicly accessible LinkedIn pages through SnapRender's browser rendering engine, then extract structured data with CSS selectors. No login needed, no account at risk.
import requests
# Render a public LinkedIn job listings page
render = requests.post(
"https://api.snaprender.dev/v1/render",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"url": "https://www.linkedin.com/jobs/search/?keywords=python+developer&location=Remote",
"output": ["html"],
"use_flaresolverr": True
}
)
rendered_html = render.json()["html"]
# Extract job listings
extract = requests.post(
"https://api.snaprender.dev/v1/extract",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"html": rendered_html,
"selectors": {
"titles": ".base-search-card__title",
"companies": ".base-search-card__subtitle",
"locations": ".job-search-card__location",
"links": ".base-card__full-link"
}
}
)
jobs = extract.json()
for i, title in enumerate(jobs["titles"]):
print(f"{title} at {jobs['companies'][i]} — {jobs['locations'][i]}")Both examples use SnapRender's /render + /extract pipeline. The rendered HTML includes all JavaScript-loaded content, and the extract step turns it into clean, structured JSON.
Legal landscape: what you need to know
LinkedIn scraping sits in a complex legal space. Here's the current state as of 2026:
hiQ Labs v. LinkedIn (2022)
The Ninth Circuit ruled that scraping publicly available data does not violate the Computer Fraud and Abuse Act (CFAA). hiQ was allowed to continue scraping public LinkedIn profiles. This is the most important precedent for web scraping legality in the US — but it specifically applies to public data.
LinkedIn Terms of Service
LinkedIn's ToS prohibit scraping, crawling, and automated data collection. Violating ToS is a breach of contract (not a criminal matter), but LinkedIn has pursued civil lawsuits against scrapers. The ToS prohibition is enforceable even for public data.
CFAA implications
The Computer Fraud and Abuse Act criminalizes "unauthorized access" to computer systems. Post-hiQ, accessing public data without circumventing technical barriers is generally not a CFAA violation. However, logging in with credentials to scrape data you wouldn't otherwise have access to could constitute unauthorized access.
Our recommendation
Stick to publicly accessible data. Don't log in to scrape. Don't circumvent technical barriers. Respect rate limits. Use the data for legitimate business purposes. And if you're building a commercial product that depends on LinkedIn data, get legal advice.
Frequently asked questions
The 2022 hiQ Labs v. LinkedIn ruling established that scraping publicly available data is not a violation of the CFAA. However, LinkedIn's Terms of Service prohibit scraping. Stick to public data, don't circumvent login walls, and consult legal counsel for commercial applications.
Yes. Many LinkedIn profiles, company pages, and job listings are publicly accessible without authentication. Using SnapRender, you can render these public pages and extract structured data without needing LinkedIn credentials.
Publicly visible data including profile names, headlines, company names, job titles, job listings, and company descriptions. Never scrape private data, connection lists, messages, or data behind login walls.
Scrape LinkedIn data the safe way
100 free requests per month. No credentials stored. No account bans. Public data only, rendered and extracted via API.
Get your API key