LinkedIn Scraper API: Profiles, Jobs and Company Pages from $0.20 per 1,000
Logged out, a LinkedIn scraper collects 4 kinds of public pages: profiles, job posts, company pages and public posts, but no emails or phone numbers. It also cannot collect connection lists, people search results or Sales Navigator data, because LinkedIn shows those only to signed-in members. ProxyField's Web Scraping API, in development and offered through Contact sales, is priced at $0.50 per 1,000 successful results over plain HTTP for the public LinkedIn URLs you already have, from $0.20 at volume ($2.00 with JS rendering), without your LinkedIn account: 1,000 profiles, 1,000 company pages and 1,000 job posts cost $1.50. 100,000 profiles cost $50, or $20 at the volume price. It returns the page, and the parser on this page turns each page into a record (profile, company or job, as below), so it fits lists of URLs, not people search or email finding. To start, contact sales, or run your own scraper on ProxyField residential proxies with the Easy Trial: 1 GB for $2.95.
Through the sales team on our 24/7 live chat
| Fetch | Entry | Volume, from |
|---|---|---|
| HTTP | $0.50 | $0.20 |
| JS rendering | $2.00 | $1.00 |
Billed on successful results only.
| The short answer | ProxyField's Web Scraping API for LinkedIn URLs |
|---|---|
| Cost per 1,000 profiles, companies or job posts | $0.50 over plain HTTP; $0.20 from 10,000 results in one purchase; $2.00 → $1.00 with JS rendering |
| Login | none: logged-out pages only, no LinkedIn account or cookies |
| Input | the public URLs you already have; no people search, no email finding |
| Output | the page (HTML, Markdown, text or a JSON envelope), plus the free parser on this page that turns it into a profile, company or job record |
| Billing | successful results only: a blocked request or timeout is not billed; a sign-in wall served with a 200 is billed (table) |
| Status | in development: Contact sales; the request format is the API design |
Read moreShow less
What you get per page, after the parser below (example values; $0.50 per 1,000 pages over plain HTTP, from $0.20, so $0.0005 a record or less):
[
{"type": "profile", "name": "Jane Example", "headline": "Head of Data", "location": "London",
"companies": ["Example Ltd", "Sample Analytics"], "education": ["University of Example"],
"url": "https://www.linkedin.com/in/jane-example/"},
{"type": "company", "name": "Example Ltd", "url": "https://www.linkedin.com/company/example",
"employees": null, "city": "London", "description": "Data tools for retailers."},
{"type": "job", "title": "Senior Data Engineer", "company": "Example Ltd", "location": "London",
"posted": "2026-10-20", "valid_through": "2026-11-19", "employment": "FULL_TIME",
"salary": {"min": 70000, "max": 85000, "unit": "YEAR", "currency": "GBP"}}
]A field the page does not fill comes back as null; LinkedIn decides which fields each public page carries.
| You ask for | Logged out, LinkedIn shows | Not shown logged out | Cost per 1,000 pages (plain HTTP) |
|---|---|---|---|
| Profiles | Name, headline, location, current company and the sections the member made public | Email, phone, full connection list, private sections | $0.50, from $0.20 |
| Job posts | Title, company, location, seniority, employment type, applicant count, description | Easy Apply, which needs a login | $0.50, from $0.20 |
| Companies | Name, industry, size range, headquarters, website, followers, description | The list of employees behind the "People" tab | $0.50, from $0.20 |
| Public posts | Author, text, date, reaction and comment counts | The full comment thread and who reacted | $0.50, from $0.20 |
| Emails | Not shown, unless the member published one in the visible profile text | Everything else: email is a contact detail, not public page data | nothing to collect |
Never reachable logged out, by any tool: people search by title or location, a company's employee list, emails and phone numbers, full comment threads, connections and Sales Navigator (details).
LinkedIn calls the public profile "a simplified version of your LinkedIn profile", and each member chooses which sections people who are not signed in may see (LinkedIn Help). The other fields are what public pages show today; LinkedIn changes them.
Best LinkedIn scraper API for public profile and company data: how to choose
For public profile and company data from URLs you already have, ProxyField's Web Scraping API (in development, Contact sales) is priced at $0.50 per 1,000 pages for profiles, companies and job posts alike, from $0.20 at volume, logged out and billed on successful results only; the parser below turns each page into the record shown at the top, so a parsed profile costs $0.0005 or less: you pay for the page, and the parser is the free part that a parsed-fields product charges for. Judge any LinkedIn scraper API on the five rows of this table: login, output, input, billing and the price per entity. It does not fit people search by title or location, or email finding: LinkedIn shows neither to logged-out visitors, and tools that offer them drive an account or use other data sources.
Read moreShow less
| Check | Why it matters | ProxyField's Web Scraping API |
|---|---|---|
| Works logged out, without your cookies or account | Tools that drive a signed-in account put that account at risk and break LinkedIn's terms | Logged out only; no LinkedIn account needed |
| Parsed fields or the raw page | Parsed fields save you a parser; a raw page lets you take any field the page shows | The raw page as HTML, Markdown or text, or a JSON envelope with the status code, final URL, headers, cookies and content; no parsed LinkedIn fields, so the 40-line parser below reads profiles, companies and jobs |
| What counts as a billable result | A sign-in wall or a blocked page should not be billed | Billed: a page LinkedIn answered with a 2xx status. Not billed: blocked requests, timeouts and errors on our side, nor the retries on new IPs. A sign-in wall served with a 200 status is billed, as is a 404 or 410 |
| Price per 1,000, per entity | Some tools charge more for profiles than for companies | Profiles $0.50, companies $0.50, job posts $0.50 per 1,000, each from $0.20; with JS rendering $2.00, from $1.00 |
| Search or URL input | People search is behind the login, so most tools need URLs | URL input |
| Output you get | You need records, not pages, in the end | The page, plus the 40-line parser below: profile (name, headline, location, companies, education), company (name, size, city, description), job (title, company, location, dates, employment type, salary range) |
What a typical job costs, all in:
| Workload | Pages | Plain HTTP at $0.50 | At the volume price, $0.20 |
|---|---|---|---|
| 1,000 profiles + 1,000 company pages + 1,000 job posts | 3,000 | $1.50 | $0.60 |
| 100,000 public profiles | 100,000 | $50 | $20 |
Test any LinkedIn scraper API on 100 of your own URLs before you commit: on the Web Scraping API that sample costs $0.05.
Billed or not: what each LinkedIn response costs
| What LinkedIn sends back | Billed? | Cost per 1,000 over plain HTTP |
|---|---|---|
| The public page, status 200 | yes | $0.50, from $0.20 |
| The sign-in wall (authwall) served with a 200 status | yes: it is a page the site served | $0.50, from $0.20 |
| A 404 or 410: the profile or job is gone | yes | $0.50, from $0.20 |
| LinkedIn's status 999, or another block | no; the request is retried on new IPs, and the retries are not billed | $0 |
| A timeout or an error on our side | no | $0 |
Every response says whether it was billed ("billed": true or false). A sign-in wall has no schema.org block, so the parser returns None for it: count those, and if they rise, slow down or switch the page type to JS rendering.
Turn the page into a record. This parser reads the schema.org block of any public profile, company page or job post, whatever fetched it, and returns one record per page, as in the sample at the top:
import json
from bs4 import BeautifulSoup
def one(x):
"""A schema.org value may be a list or a single object: take the first."""
return (x[0] if x else {}) if isinstance(x, list) else (x if isinstance(x, dict) else {})
def first(x):
"""A text value may also come as a list: take the first."""
return (x[0] if x else None) if isinstance(x, list) else x
def names(x):
"""All the names in a schema.org value: companies worked for, schools."""
return [i.get("name") for i in (x if isinstance(x, list) else [x]) if isinstance(i, dict)]
def linkedin_record(html, url=None):
"""One dict per public LinkedIn page, from its schema.org JSON-LD block."""
soup = BeautifulSoup(html, "html.parser")
for tag in soup.select('script[type="application/ld+json"]'):
data = json.loads(tag.string or "{}")
for node in data.get("@graph", [data]): # some pages wrap their nodes in @graph
kind = node.get("@type")
if kind == "Person":
return {"type": "profile", "name": node.get("name"), "headline": first(node.get("jobTitle")),
"location": one(node.get("address")).get("addressLocality"),
"companies": names(node.get("worksFor")), "education": names(node.get("alumniOf")), "url": url}
if kind == "Organization":
return {"type": "company", "name": node.get("name"), "url": node.get("url"),
"employees": one(node.get("numberOfEmployees")).get("value"),
"city": one(node.get("address")).get("addressLocality"), "description": node.get("description")}
if kind == "JobPosting":
pay = one(node.get("baseSalary")); value = one(pay.get("value"))
return {"type": "job", "title": node.get("title"),
"company": one(node.get("hiringOrganization")).get("name"),
"location": one(one(node.get("jobLocation")).get("address")).get("addressLocality"),
"posted": node.get("datePosted"), "valid_through": node.get("validThrough"),
"employment": node.get("employmentType"),
"salary": {"min": value.get("minValue"), "max": value.get("maxValue"),
"unit": value.get("unitText"), "currency": pay.get("currency")} if pay else None}
return None # no block: the page was a sign-in wall, or it needs JS renderingThe field names are schema.org's (Person: worksFor, alumniOf; Organization: numberOfEmployees; JobPosting: baseSalary, validThrough); which of them a page fills is LinkedIn's choice, so a missing value comes back as None (null in JSON). Pass the page's URL as url to keep it in the profile record.
What data can a LinkedIn scraper collect: profiles, job posts, companies, emails
- Emails and phone numbers: no. LinkedIn shows them to signed-in members only, so no logged-out scraper collects them.
- Profiles, job posts, company pages and public posts: yes, the fields each public page shows, as in the table.
- Connection lists, people search and Sales Navigator: no, for the same reason as emails. The fields below are what LinkedIn's public pages show a logged-out visitor; LinkedIn changes them and shows less to traffic it suspects is automated.
Read moreShow less
| Entity | Public URL | Fields on the public page | Not shown logged out | Structured data in the HTML |
|---|---|---|---|---|
| Profile | linkedin.com/in/<name>/ | Name, headline, location, current company, follower and connection count ("500+"), and the sections the member made public: about, experience (titles, companies, dates), education, languages | Email, phone, the full connection list, sections the member keeps private | Often a schema.org Person block |
| Job post | linkedin.com/jobs/view/<id>/ | Title, company, location, seniority level, employment type, job function, industries, applicant count ("Over 200 applicants"), description, pay range when the employer adds one, and the posting date when the page shows it | Easy Apply, saved jobs and the applicant list | A schema.org JobPosting block |
| Company page | linkedin.com/company/<name>/ | Name, tagline, industry, company size range ("1,001-5,000 employees"), headquarters, type, founded, specialties, website, follower count, office locations, recent public posts | The employee list behind the "People" tab; only a count is shown | Often a schema.org Organization block |
| Public post | linkedin.com/posts/<id>/ | Author, text, date, reaction and comment counts, the first few comments | The full comment thread and the list of people who reacted | Varies |
| none | Only the member, their connections or the audience they choose see the email address (LinkedIn Help) | Always | none |
What a logged-out scraper does not get:
- Search results for people: people search needs a login, so you start from a list of profile URLs you already have.
- Employee lists of a company: the "People" tab needs a login; the company page shows only a count.
- Emails and phone numbers: "email finder" tools guess an address from the name and company domain or buy it from other data sources; it does not come from LinkedIn's public page.
- Full comment threads, connections, InMail, Sales Navigator and Recruiter data.
What the Web Scraping API returns for a LinkedIn URL
The Web Scraping API returns the page LinkedIn sent to a logged-out request, not a parsed LinkedIn record: you read the fields from the HTML or from the structured-data block with the parser above. If LinkedIn answers with its sign-in wall, that is what comes back, and it is billed: a sign-in page served with a 200 status counts as a result. The API returns the page itself as HTML, Markdown or plain text, or a JSON envelope with the status code, the final URL, the headers, the cookies and the content; it has no parsed LinkedIn fields, so your parser reads them.
Read moreShow less
By its design (API documentation), the API takes a POST to https://api.proxyfield.io/v1/scrape with your API key in an Authorization: Bearer <api_key> header and a JSON body: url, render (false for plain HTTP, true for JS rendering), country and output (html, markdown, text or json).
# The request in the Web Scraping API's design (access through Contact sales)
curl https://api.proxyfield.io/v1/scrape \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.linkedin.com/company/example/", "render": false, "country": "us", "output": "json"}'Example response (shortened; content is the page's HTML):
{
"metadata": {"id": "req_b5e20d7f9a1c4e38", "api": "web_scrape", "status": "success", "billed": true},
"status_code": 200,
"final_url": "https://www.linkedin.com/company/example/",
"content_type": "text/html; charset=utf-8",
"content": "<!DOCTYPE html><html lang=\"en\">…</html>"
}| Choice | Price per 1,000 successful results | Use it for |
|---|---|---|
| Plain HTTP | $0.50, from $0.20 at volume | Company pages and job posts, whose text is in the HTML |
| JS rendering | $2.00, from $1.00 at volume | Pages that build their content in the browser |
Start with plain HTTP and switch a page type to JS rendering only if the text you need is missing from the HTML. To see what you get before you commit, fetch a sample: 100 LinkedIn pages over plain HTTP cost $0.05, and 100 rendered pages cost $0.20.
Pricing: $0.50 per 1,000 LinkedIn pages, from $0.20
LinkedIn pages cost the Web Scraping API's price: $0.50 per 1,000 successful results over plain HTTP ($0.0005 a page), from $0.20 at volume, and $2.00 per 1,000 with JS rendering ($0.002 a page), from $1.00 at volume. You are billed on successful results only. Billed: a page LinkedIn answered with a 2xx status. Not billed: blocked requests, timeouts and errors on our side; a blocked request is retried on new IPs, and the retries are not billed. Every response says whether it was billed. A target's 404 or 410, and a sign-in page the site serves with a 200 status, count as billed results. The volume prices start at 10,000 successful results in one purchase.
At the volume prices the 90,000 job posts cost $18 over plain HTTP and the 100,000 profiles $20. Payment and balance: the same crypto balance as proxies, which never expires; there is no subscription or monthly fee. All prices: pricing.
Through the sales team on our 24/7 live chat
Sales contact: the sales team on our 24/7 live chat.
| Workload | Results | Plain HTTP at $0.50 | JS rendering at $2.00 |
|---|---|---|---|
| A test sample of LinkedIn URLs | 100 | $0.05 | $0.20 |
| 1,000 company pages | 1,000 | $0.50 | $2.00 |
| 10,000 company pages, once a month | 10,000 | $5 | $20 |
| 3,000 new job posts a day, for 30 days | 90,000 | $45 | $180 |
| 100,000 public profile pages | 100,000 | $50 | $200 |
Own Python script or a LinkedIn data API?
Script for a few hundred public pages, the Web Scraping API for thousands a week, LinkedIn's official API only for sign-in and partner products. A script costs about $0.74 per 1,000 pages on residential traffic at $2.95/GB (at an assumed 250 KB a page) plus your time; the Web Scraping API is priced at $0.50 per 1,000 successful results (in development, Contact sales), and blocked fetches are not billed. The blocks and retries become someone else's job. Neither route reaches logged-in data; LinkedIn's official API covers only what its partner products allow.
Read moreShow less
| Item | Your own script on residential proxies | ProxyField's Web Scraping API | LinkedIn's official API |
|---|---|---|---|
| Cost per 1,000 pages (break-even) | about $0.74 at $2.95/GB, about $0.49 at $1.95/GB (an assumed 250 KB a page with retries) | $0.50, from $0.20 | Set by LinkedIn |
| Who can use it | Anyone | ProxyField customers | Approved partners, per product |
| Good for | A few hundred public pages, one-off | Thousands of public pages, recurring | Sign-in, marketing, recruiting and learning integrations |
| Data | Public profiles, company pages, job posts | Public profiles, company pages, job posts | What each product allows, mostly your own account or the members who sign in to your app |
| You pay | Residential traffic: $2.95/GB for 1 GB, from $1.95/GB | $0.50 per 1,000 successful results, from $0.20 | Set by LinkedIn |
| You maintain | The parser, the sign-in-wall and status 999 handling, retries, IP rotation | The parser only | The integration and LinkedIn's approval |
| If LinkedIn blocks you (status 999 or the sign-in wall) | Every blocked or walled response costs you traffic, and you write the retry | A 999 or other block is not billed and is retried on new IPs; a sign-in wall served with a 200 is billed | – |
| Your time (an example; set your own) | About 4 h to write the parser and the 999 handling, then about 1 h a month when LinkedIn changes a page | The parser, about 1 h; the parser above is a start | The application and approval |
| Account and legal risk | A script that logs in puts that account at risk; logged out, collecting still breaches LinkedIn's terms | Logged out, no account at risk; it still breaches LinkedIn's terms, and a vendor's tool does not make scraped data compliant | Within LinkedIn's terms |
| What the courts said (US) | hiQ v. LinkedIn (9th Cir. 2022): public profiles likely not "without authorization" under the CFAA, but hiQ was later found in breach of the User Agreement | The same: the tool does not change the terms | – |
| Logged-in data | No: use LinkedIn's own data export | No | Only for members who sign in to your app |
How to compare the two for your size: divide the traffic you use by the pages you get. Your script prints the bytes of each response (len(resp.content)), so measure 100 pages first. For example, if an HTML page with retries averages 250 KB (an assumption, not a measurement), 1 GB at $2.95 fetches about 4,000 pages, about $0.74 per 1,000, against $0.50 per 1,000 on the API; at $1.95/GB it is about $0.49 per 1,000, and you still maintain the scraper.
Scrape LinkedIn with Python and ProxyField proxies
For a few hundred public pages, a Python requests script through rotating residential IPs works: fetch the page logged out, stop if LinkedIn redirects to its sign-in wall (/authwall in the URL) or answers with its unusual status code 999, and read the structured data the page carries. LinkedIn blocks datacenter IPs and fast request rates quickly, so keep the rate low and use a new IP on every request.
Read moreShow less
import json, time
import requests
from bs4 import BeautifulSoup
proxy = "http://<login>-country-us-city-new_york:<password>@gate.proxyfield.io:7000"
urls = ["https://www.linkedin.com/jobs/view/1234567890/"] # public job posts you already have
for url in urls:
resp = requests.get(url, proxies={"http": proxy, "https": proxy},
headers={"Accept-Language": "en-US"}, timeout=30)
if resp.status_code == 999 or "authwall" in resp.url or resp.status_code != 200:
print("Stopped:", resp.status_code, resp.url, "- slow down; never log in with a scraper account")
break
soup = BeautifulSoup(resp.text, "html.parser")
for tag in soup.select('script[type="application/ld+json"]'):
data = json.loads(tag.string or "{}")
if data.get("@type") == "JobPosting":
print(data.get("title"), "|", data.get("hiringOrganization", {}).get("name"),
"|", data.get("datePosted"), "|", len(resp.content), "bytes")
time.sleep(10) # one page every 10 s or slowerWhat to expect: a 200 with the page; a 999, or a 302 to linkedin.com/authwall, when LinkedIn has flagged the request, which means wait and slow down, not retry at once.
ProxyField residential proxies cost $2.95/GB for 1 GB and from $1.95/GB at volume, with no subscription; the traffic never expires, and all purchases are final. You get 412M+ residential IPs in 195+ countries and 21,000+ cities, a new IP on every request or a sticky session from 30 s to 36 h, over HTTP, HTTPS or SOCKS5 at gate.proxyfield.io:7000. The same proxy settings work in Playwright and Selenium if you need a browser.
Managing your own LinkedIn accounts through a fixed IP is a different job, covered by LinkedIn proxies.
LinkedIn's official API or scraping?
LinkedIn's own APIs are built for approved partners and specific products, such as sign-in, marketing, recruiting and learning integrations (LinkedIn API documentation). Most need an application and LinkedIn's approval, and none of them gives you search access to other members' profiles. Signing in with LinkedIn returns the signed-in member's basic profile, not anyone else's. Scraping reads the public pages instead, within the limits below; the three routes side by side are in the table above.
What teams use LinkedIn data for
- Job-market analytics count and classify public job posts by role, skill, location and company; job boards beyond LinkedIn are on the job scraper.
- Company research industry, size range and headquarters for a list of target accounts.
- Hiring signals for B2B sales which companies are posting roles in your category; for lists from many sources, see the lead scraper.
- Talent mapping the public headlines and locations of people in a role, kept to what you need.
Not allowed on ProxyField: spam, fraud including fake accounts or engagement, and accessing data behind logins you are not entitled to.
LinkedIn's terms and the law
LinkedIn's User Agreement forbids scraping, and its help page on prohibited scraping software names crawlers, bots and browser extensions; search engines crawl under separate crawling terms. So collecting even public pages is a breach of its terms, separate from whether it breaks a law, and a vendor's tool does not make scraped data compliant.
- United States in hiQ Labs v. LinkedIn (No. 17-16783, 31 F.4th 1180), the Ninth Circuit held in April 2022 that scraping public profiles was likely not access "without authorization" under the Computer Fraud and Abuse Act. In November 2022 the district court found that hiQ had breached LinkedIn's User Agreement, and the case ended in a settlement in December 2022.
- EU and UK profiles are personal data, so GDPR and UK GDPR need a lawful basis, data minimisation and a notice to the people concerned; using scraped addresses for marketing also falls under PECR in the UK and CAN-SPAM in the US.
The full answer is in Is It Legal to Scrape LinkedIn, Instagram, X and Other Social Media? and Is Web Scraping Legal? US, EU and UK Rules (2026).
ProxyField's acceptable use policy allows collecting public web data and market research, and forbids accessing data behind logins you are not entitled to and fake accounts; some site categories are restricted to protect the network, including financial and government services. ProxyField's rule for every site: public pages only, and follow the site's terms. This is not legal advice.
More scraper APIs
- Web Scraping API any URL, plain HTTP or with JS rendering, from $0.20 per 1,000 successful results.
- Lead scraper company and job data from many sources on the same API.
- job scraper company and job data from many sources on the same API.
- Instagram scraper public social pages.
- X (Twitter) scraper public social pages.
- Google SERP API the Google results page as JSON, $1.20 per 1,000 successful results, from $0.80.
- All scraper APIs
LinkedIn Scraper API FAQ
24/7 support by live chat, including help with setup and integration.
What's the best LinkedIn scraper API for collecting public profile and company data?
ProxyField's Web Scraping API, in development through Contact sales, is priced at $0.50 per 1,000 successful results for public LinkedIn profiles, company pages and job posts over plain HTTP, from $0.20 from 10,000 results in one purchase, logged out and without your LinkedIn account; 1,000 profiles plus 1,000 company pages cost $1.00, and 100,000 profiles $50, or $20 at volume. It returns the page, and the 40-line parser on this page turns each one into a record (a profile's name, headline, location, companies and schools; a company's size and city; a job's title, dates and salary range); it does no people search or email finding. Whatever tool you compare, check five things: no login, URL or search input, parsed or raw output, whether a sign-in wall is billed, and the price per 1,000 for each entity.
What data can a LinkedIn scraper actually collect: profiles, job posts, companies or emails?
No emails or phone numbers: LinkedIn shows them to signed-in members only. Yes to profiles, job posts, company pages and public posts, as far as LinkedIn shows them logged out: names, headlines, locations, experience the member made public, job titles, seniority, applicant counts, company size ranges, industries, headquarters and post text with reaction counts. Connection lists, a company's employee list and Sales Navigator data need a login too, and "email finder" tools guess or buy addresses from other sources, not from LinkedIn's public pages.
Is it better to scrape LinkedIn with my own Python script or pay for a LinkedIn data API?
A script on rotating residential proxies costs about $0.74 per 1,000 pages at $2.95/GB (assuming 250 KB a page) plus your time, and you handle the sign-in wall and status 999 yourself, so it suits a few hundred public pages. For thousands of pages a week, ProxyField's Web Scraping API (in development, Contact sales) is priced at $0.50 per 1,000 successful results, from $0.20 at volume, and blocked fetches are not billed. Neither reaches logged-in data, and LinkedIn's official API serves only approved partner products.
Does a LinkedIn scraper return parsed data or HTML?
It depends on the tool: some return parsed records, others the page. ProxyField's Web Scraping API returns the page LinkedIn sent, at $0.50 per 1,000 successful results, and you read the fields from the HTML or the page's structured-data block.
Can a LinkedIn scraper search for people by job title or location?
Not logged out: LinkedIn's people search needs a signed-in account, so logged-out tools start from profile URLs you already have. ProxyField's Web Scraping API takes those URLs at $0.50 per 1,000 successful results; tools that offer search drive an account or use other data sources.
How much does it cost to scrape 1,000 LinkedIn profiles?
With ProxyField's Web Scraping API, 1,000 public profile pages cost $0.50 over plain HTTP and $2.00 with JS rendering, and only successful results are billed. 100,000 profiles cost $50 over plain HTTP, or $20 at the volume price.
How do I scrape LinkedIn?
List the public URLs you need, such as company pages or job posts, fetch each one logged out, and read the data from the HTML or the structured data on the page. Rotate IPs, keep the rate low and stop at LinkedIn's sign-in wall rather than logging in.
How do I scrape LinkedIn profiles?
Use the public profile URLs (linkedin.com/in/<name>/) and collect only what LinkedIn shows logged out: name, headline, location and any public sections. Profiles are personal data in the EU and UK, so keep only the fields you need and have a lawful basis.
How do I scrape emails from LinkedIn?
You can't from public pages: LinkedIn does not show members' email addresses to logged-out visitors. Contact details visible only to connections are behind the login, and using scraped addresses for marketing is regulated by GDPR and PECR in Europe and CAN-SPAM in the US.
How do I scrape LinkedIn jobs?
Public job posts at linkedin.com/jobs/view/<id>/ open without a login and carry a JobPosting block with the title, company, location, date and description. Fetch them over plain HTTP at $0.50 per 1,000 successful results; 3,000 new posts a day is about $45 a month.
Show 12 more questionsShow fewer questions
How do I scrape LinkedIn posts?
Only posts that are public and open at their own URL can be collected logged out; the feed itself needs a login. Fetch each public post URL and read the author, text, date and reaction counts the page shows.
How do I scrape LinkedIn with Python?
Use requests through a rotating residential proxy, check that the response is not LinkedIn's sign-in wall, and parse the page with Beautiful Soup, as in the code on this page. Add a pause of 10 s or more between requests and stop when you see status 999 or a redirect to the sign-in page.
Do you need a proxy to scrape LinkedIn?
Beyond a handful of pages, yes: LinkedIn limits requests per IP and blocks datacenter ranges quickly. Rotating residential IPs, such as ProxyField's from $1.95/GB, spread the requests; with the Web Scraping API you need no proxies of your own.
How many profiles can you scrape off LinkedIn?
LinkedIn publishes no number for logged-out visitors; it limits each IP as it sees fit and shows the sign-in wall sooner to fast traffic. Plan by pages per day across rotating IPs, and budget $0.50 per 1,000 successful results on the Web Scraping API.
How do I export my LinkedIn connections?
You don't need a scraper: LinkedIn lets you download a copy of your data, including a connections file, from the data privacy section of your settings. Other members' connection lists are behind the login and out of scope.
How can I scrape LinkedIn data for free?
For a few pages, a free Python script on your own IP works until LinkedIn blocks it. At any real volume you pay for IPs or an API; ProxyField's smallest purchase is 1 GB of residential traffic for $2.95, with no subscription, and 100 pages on the Web Scraping API cost $0.05.
Does LinkedIn have an official API for profile or job data?
LinkedIn has developer APIs for approved partners and specific products, such as sign-in, marketing and recruiting integrations, and most need LinkedIn's approval. Sign-in returns the signed-in member's own basic profile, not search access to other profiles or jobs.
Why is LinkedIn so hard to scrape?
LinkedIn shows logged-out visitors only part of each page, redirects suspected bots to a sign-in wall, answers some requests with status 999 and blocks datacenter IPs and fast request rates. Its page layouts also change, so parsers need maintenance.
Is there a LinkedIn scraper on GitHub?
Yes, several open-source LinkedIn scrapers are on GitHub, but most drive a logged-in browser session, which breaks LinkedIn's terms and puts the account at risk. Check whether a project works logged out before you use it.
Can I scrape LinkedIn with Claude or another AI assistant?
An AI assistant can write the scraper or extract fields from pages you have already fetched; the fetching is done by your scraper or an API. The same limits apply: public pages, no login, a low request rate.
Can I scrape LinkedIn with n8n?
Yes: an n8n HTTP Request node can call a scraping API with a public LinkedIn URL and pass the page to the next step. With ProxyField's Web Scraping API each successful page costs $0.50 per 1,000, from $0.20 at volume.
Related pages
Collect LinkedIn pages with the Web Scraping API
Billed on successful results only. Contact sales for the Web Scraping API and the volume you need, or run your own scraper on residential proxies. 24/7 live chat helps with setup and integration.