Tutorial

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.

·10 min read

Why scrape LinkedIn?

LinkedIn has over 1 billion members and 60 million company pages. The professional data on the platform drives real business value:

  • 1
    Lead generation — Build targeted prospect lists from public profiles and company pages.
  • 2
    Job market analysis — Track hiring trends, salary ranges, and in-demand skills across industries.
  • 3
    Competitor hiring patterns — Monitor which roles competitors are filling to predict their product roadmap.
  • 4
    Recruitment — 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:

!Login walls — most profile data is hidden behind authentication
!Rate limiting — aggressive throttling on all pages, even public ones
!Bot detection — browser fingerprinting, mouse movement tracking, and timing analysis
!Legal threats — LinkedIn actively sends cease-and-desist letters to scrapers
!Account bans — automated LinkedIn accounts get flagged and permanently suspended

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.

Python + Selenium
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