LinkedIn Jobs Scraper
Pricing
from $4.99 / 1,000 results
LinkedIn Jobs Scraper
Scrapes LinkedIn job listings with full details: title, company, location, salary, description, employment type, seniority level, and more. Supports keyword search, location filters, date posted, job type, experience level, and automatic pagination.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Coding Frontned
Maintained by CommunityActor stats
1
Bookmarked
18
Total users
2
Monthly active users
18 hours ago
Last modified
Categories
Share
LinkedIn Jobs Scraper
Search LinkedIn’s public guest jobs endpoint and return normalized, deduplicated job listings. The Actor supports public date, job-type, experience, and workplace filters, bounded pagination, optional detail enrichment, local HTML fixtures, and truthful run diagnostics. It does not require login credentials.
Target: LinkedIn public jobs
Use cases
- Build a current job-market dataset for a keyword and location.
- Compare public listings by recency, workplace, employment type, or experience level.
- Enrich a bounded result set with public descriptions, criteria, salary text, skills, and benefits.
- Regression-test parsing against synthetic list/detail HTML before a live run.
Input
The minimum valid input is:
{"keywords": "software engineer"}
Supported fields:
| Field | Type | Default / bounds | Description |
|---|---|---|---|
keywords | string | required, 1–200 chars | Public job-search text. |
location | string | United States, 1–200 chars | Location sent to LinkedIn. |
maxJobs | integer | 50, 1–100 | Maximum unique normal records. |
maxPages | integer | derived, 1–20 | Optional pagination bound. |
datePosted | enum | anyTime | pastMonth, pastWeek, or past24Hours are also supported. |
jobType | enum | any | F full-time, P part-time, C contract, T temporary, I internship, V volunteer, O other. |
experienceLevel | enum | any | LinkedIn public levels 1–6. |
remoteFilter | enum | any | 1 on-site, 2 remote, 3 hybrid. |
scrapeJobDetails | boolean | true | Fetch public job detail HTML for each unique result. |
includeDiagnostics | boolean | true | Include minimal diagnostic rows for blocked/empty/failing requests. |
requestTimeoutSecs | integer | 30, 10–120 | Per-request timeout. |
maxRequestRetries | integer | 2, 0–5 | Transient HTTP retry limit. |
requestDelayMs | integer | 250, 0–10000 | Pacing between public endpoint requests. |
proxyConfiguration | object | residential US proxy | Standard Apify proxy configuration; set { "useApifyProxy": false } for a direct local smoke run. |
For local development, fixtureListHtml or fixtureListFiles enables deterministic list-page mode. fixtureListFile is a compatible single-file alias. fixtureDetailHtml, fixtureDetailFiles, and fixtureDetailFile provide detail pages for fixture enrichment. Fixture paths must stay inside this Actor directory and use .html or .htm.
Example with filters and bounded output:
{"keywords": "data engineer","location": "New York","maxJobs": 10,"datePosted": "pastWeek","jobType": "F","remoteFilter": "2","scrapeJobDetails": false,"includeDiagnostics": true}
Output
Normal dataset rows contain public business and provenance fields. jobDescription is used instead of the platform-reserved description field.
| Field | Meaning |
|---|---|
position, jobId, jobTitle, company, location, jobUrl | Stable normalized listing identity and core public fields. |
companyUrl, companyLogo, isRemote, postedDate, applicantCount | Public card metadata when available. |
salary, employmentType, seniorityLevel, industry, jobFunction | Public detail criteria when available. |
jobDescription, descriptionBullets, benefits | Public detail content when available. |
searchKeywords, searchLocation, scrapedAt | Search context and collection provenance. |
The earlier detailScraped row field was intentionally removed as extraction instrumentation. Detail request/success/failure counts remain in the OUTPUT key-value summary, while business fields are retained.
Diagnostic rows, when enabled, contain only url, error, errorCode, and scrapedAt; they never masquerade as job records. The OUTPUT key-value record includes success/empty/partial status, normal and diagnostic counts, pagination, detail, deduplication, request, proxy, fixture, and bounded failure evidence.
Limits and responsible use
Requests are sequential and bounded. Responses larger than 3 MB, access challenges, and malformed public cards are handled fail-closed with summary/diagnostic evidence. LinkedIn job availability and public endpoint behavior change frequently.
Use public job data lawfully and respect LinkedIn terms, rate limits, and applicable privacy and data-protection requirements. Do not provide credentials or attempt to bypass access controls.
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Local development
From this Actor directory:
npm installnpm testnpm run checkapify run --purge --input-file test/inputs/fixture-basic.jsonapify run --purge --input-file test/inputs/fixture-detail.jsonnpm run validate
The fixture runs do not contact LinkedIn. A direct public smoke input can use proxyConfiguration: { "useApifyProxy": false }; no credentials are required.