LinkedIn Jobs Scraper
Pricing
from $3.00 / 1,000 job scrapeds
LinkedIn Jobs Scraper
Scrape public LinkedIn job search results and job detail pages. Extract title, company, location, employment type, seniority, description, apply URL, posted date, and applicants info when public.
Pricing
from $3.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Harsh
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
9 days ago
Last modified
Categories
Share
Scrape public LinkedIn job search results and job detail pages — title, company, location, workplace type, employment type, seniority, description, apply URL, posted date, and applicants (when public). Built with TypeScript, Crawlee CheerioCrawler, and LinkedIn guest/public job endpoints (no login required for many public listings).
Run it on the Apify platform for scheduling, API access, proxy rotation, monitoring, and dataset exports (JSON, CSV, Excel).
What does LinkedIn Jobs Scraper do?
Given LinkedIn job search URLs and/or keywords + location, this Actor:
- Converts public search URLs into LinkedIn guest
seeMoreJobPostingsAPI requests - Paginates search results until
maxJobsis reached - Optionally opens each job’s guest detail page for full description and criteria
- Deduplicates jobs by
jobId - Pushes structured dataset items
- Exports JOBS.csv and SUMMARY.md to the key-value store
Why use LinkedIn Jobs Scraper?
- Recruiting pipelines — build candidate-role inventories from public listings
- Sales / lead generation — find companies hiring for target roles
- Market research — track job titles, locations, and seniority mix over time
- Competitive intel — monitor which skills and roles competitors post
How to scrape LinkedIn jobs
- Open the Actor in Apify Console
- Paste a LinkedIn jobs search URL or set
keywords+location - Set Max jobs and enable/disable full descriptions
- Keep concurrency low and enable Apify Proxy (residential recommended)
- Click Start
- Download results from the Dataset tab or key-value store exports
Input
| Field | Type | Default | Description |
|---|---|---|---|
searchUrls | string[] | [] | Public LinkedIn job search URLs |
keywords | string | "" | Keywords used to build a search URL |
location | string | "" | Location paired with keywords |
maxJobs | integer | 50 | Max unique jobs (by jobId) |
maxConcurrency | integer | 2 | Concurrent HTTP requests |
maxRequestRetries | integer | 3 | HTTP retry count |
requestDelayMs | integer | 1000 | Delay used for rate limiting |
proxyConfiguration | object | Apify Proxy on | Proxy settings |
includeDescription | boolean | true | Fetch job detail pages for full description |
Example (search URL):
{"searchUrls": ["https://www.linkedin.com/jobs/search/?keywords=software%20engineer&location=United%20States"],"maxJobs": 50,"maxConcurrency": 2,"maxRequestRetries": 3,"requestDelayMs": 1000,"proxyConfiguration": { "useApifyProxy": true },"includeDescription": true}
Example (keywords + location):
{"keywords": "account executive","location": "New York, United States","maxJobs": 25,"includeDescription": true,"proxyConfiguration": { "useApifyProxy": true }}
See examples/input.json.
Output
Each dataset item is one job:
{"jobId": "4123456789","title": "Senior Software Engineer","company": "Acme Corp","companyUrl": "https://www.linkedin.com/company/acme-corp","location": "San Francisco, CA","workplaceType": "Remote","employmentType": "Full-time","seniority": "Mid-Senior level","description": "Build scalable backend services in TypeScript and Node.js...","postedAt": "2026-07-01","applicants": "Over 200 applicants","applyUrl": "https://www.linkedin.com/jobs/view/4123456789/?isApplication=true","jobUrl": "https://www.linkedin.com/jobs/view/4123456789","scrapedAt": "2026-07-13T12:00:00.000Z","error": null}
You can download the dataset as JSON, HTML, CSV, or Excel. The Actor also writes:
| Key-value record | Description |
|---|---|
JOBS.csv | All job rows as CSV |
SUMMARY.md | Markdown summary table of results |
Data fields
| Field | Description |
|---|---|
jobId | LinkedIn job posting ID |
title | Job title |
company | Hiring company name |
companyUrl | LinkedIn company URL when available |
location | Location string from the listing |
workplaceType | Remote / Hybrid / On-site (inferred when possible) |
employmentType | Full-time, Part-time, Contract, etc. |
seniority | Seniority level when public |
description | Full text when includeDescription is true |
postedAt | Posted date or relative time |
applicants | Public applicants caption |
applyUrl | Application link when available |
jobUrl | Canonical public job URL |
scrapedAt | ISO scrape timestamp |
error | Soft error for blocked/partial records |
Pricing
Pay-per-event (PPE): $0.003 per job (dataset item), plus a small Actor-start fee.
Estimate: 50 jobs ≈ $0.15.
Tips
- Prefer Apify Proxy residential if you hit auth walls, captchas, or empty results
- Keep
maxConcurrencyat 1–3 andrequestDelayMsaround 1000–2000 ms - Set
includeDescription: falsefor faster/cheaper runs when you only need titles and companies - Use stable public search URLs from an incognito browser session
- Unit tests use HTML fixtures so CI does not depend on live LinkedIn access
Limitations
- Scrapes public/guest LinkedIn job pages only — not authenticated feed data
- LinkedIn frequently shows auth walls or rate limits; proxy + low concurrency help but do not guarantee 100% coverage
- Cheerio parses static HTML. Heavily client-rendered views may return fewer fields
- Some fields (applicants, apply URL, full description) are only present on detail pages
- Respect LinkedIn Terms of Service and applicable laws; use data responsibly
Technical notes
- Search pagination uses
https://www.linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search?...&start=N - Job details use
https://www.linkedin.com/jobs-guest/jobs/api/jobPosting/{jobId} - Extraction strategies: DOM job cards, JSON-LD
JobPosting, job criteria lists - Graceful handling of auth walls / blocks: logs a warning and falls back to search-card data when detail is blocked
Development
cd factory/linkedin-jobs-scrapernpm installnpm testnpm run buildapify run
License
Apache-2.0