LinkedIn Jobs Scraper
Pricing
from $2.49 / 1,000 results
LinkedIn Jobs Scraper
LinkedIn Jobs Scraper SD - LinkedIn Jobs Scraper is a job data tool that extracts public LinkedIn job postings by keyword and location: title, company, location, date, applicants, seniority, employment type, industries and full description. No login.
Pricing
from $2.49 / 1,000 results
Rating
0.0
(0)
Developer
Neuro Scraper
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper — public LinkedIn job postings, no login
The LinkedIn Jobs Scraper reads LinkedIn's public, logged-out job search and job pages and returns one row per job: title, company, location, posted date, applicants, seniority level, employment type, industries, salary (when the job page shows one) and the full description.
It reads only the guest job pages anyone can open without an account. No login, no cookies, no profiles, no company pages.
Input
| Field | Type | Default | Meaning |
|---|---|---|---|
keywords | list | python developer (prefill) | One LinkedIn job search per line |
location | text | United States (prefill) | Where to search, as typed on LinkedIn; empty = worldwide |
startUrls | URLs | – | LinkedIn job search URLs (filters in them are used) or single job URLs (/jobs/view/<id>/) |
timePosted | select | any | Past 24 hours / week / month — LinkedIn's own filter |
jobTypes | multi-select | – | Full-time, Part-time, Contract ... — checked against each job page's "Employment type" |
experienceLevels | multi-select | – | Internship ... Executive — checked against each job page's "Seniority level" |
remoteOnly | boolean | false | Keep jobs whose title, location or description mentions remote work (text check) |
easyApplyOnly | boolean | false | LinkedIn's own Easy Apply filter |
companyIds | list | – | LinkedIn numeric company IDs (the f_C= value of a LinkedIn search URL) |
scrapeDetails | boolean | true | Open each job page (description, applicants, criteria, salary) |
maxItems | integer | 20 | Stop after this many jobs |
proxyConfiguration | proxy | Apify RESIDENTIAL | Proxy for LinkedIn |
A job URL given in startUrls is always returned; the filters apply to search results.
Output
| Field | Meaning |
|---|---|
jobId, jobUrl | LinkedIn job ID and https://www.linkedin.com/jobs/view/<id>/ |
title, companyName, companyUrl, companyLogo | From the search card / job page |
location, postedDate, postedTimeAgo, badge | Card location, date (YYYY-MM-DD), "1 week ago", "Actively Hiring" |
salary | "Base pay range ..." when the job page shows it |
applicantsCount, applicantsText | 66 for "66 applicants"; 200 for "Over 200 applicants" (a lower bound); empty for "Be among the first 25 applicants" |
seniorityLevel, employmentType, industries | The job page's criteria list |
applyType | easyApply or offsite (the off-site apply link is behind LinkedIn sign-in) |
descriptionText, descriptionHtml | Full description |
remoteMentioned | Title, location or description mentions remote work |
searchKeywords, searchLocation, searchUrl, scrapedAt | The search that produced the row, UTC time |
With scrapeDetails off, rows hold the card fields only (no salary, applicants, criteria, description).
Measured (2026-10-03, one residential IP, no proxy)
| Test | Result |
|---|---|
python developer / United States, 20 jobs with details | 20 rows in 41 s, 2 search pages + 20 job pages, every request HTTP 200 |
data engineer / United States, past week, 120 jobs, no details | 120 rows in 23 s from 12 pages; every posted date within the week |
| Nurse search URL (London, past week) + job URL, full-time + 3 seniority levels | 8 matching rows in 423 s: 22 search pages, 207 job pages dropped by the filters |
Job URL + software engineer remote only | 4 rows in 28 s (job URL kept, 3 remote jobs, 8 dropped) |
| Bad URLs / empty input | Clean stop with an error line per input |
Limits (measured)
- One search reaches about 990 jobs:
start=990came back empty andstart=1000answered HTTP 400. Split big searches by location or time posted. - Logged out, LinkedIn ignores its job-type (
f_JT), experience (f_E), remote (f_WT) and distance filters: the results were identical with and without them. The Actor therefore checks job type and seniority on each job page and remote work by text. Most jobs say "Not Applicable" for seniority (15 of 20 in our default test), so seniority filters can need many job pages. - LinkedIn's guest job page no longer shows "Job function" (0 of 20 jobs). Salary was on 5 of 20 job pages and on 0 of 140 search cards.
- LinkedIn throttles heavy traffic (HTTP 429 / 999). None appeared in our ~300 requests at 1.2–2.4 s spacing. On a throttle the Actor waits, opens a new session (a new proxy IP on Apify) and stops that search after 3 tries.
Terms note
LinkedIn's User Agreement (section 8.2) prohibits scraping and automated access to its services. Its robots.txt asks for permission before automated access, and its Googlebot rules disallow /jobs-guest/.
In hiQ Labs v. LinkedIn the Ninth Circuit (2022) found scraping public pages is likely not "unauthorized access" under the CFAA. The district court then found hiQ had breached LinkedIn's User Agreement, and the case ended in a 2022 consent judgment.
This Actor reads only public, logged-out job postings, slowly, and collects no member profiles. You are responsible for how you use it and the data.
Example input
{"keywords": ["data engineer"], "location": "United States", "timePosted": "pastWeek", "maxItems": 100, "scrapeDetails": false}