LinkedIn Jobs Scraper Pro
Pricing
Pay per usage
LinkedIn Jobs Scraper Pro
Search LinkedIn jobs by title, location, seniority & work type. Multi-location, remote filter, Easy Apply detection. Export to XLSX, CSV, JSON.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Sonal Sharma
Maintained by CommunityActor stats
0
Bookmarked
17
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper Pro v2
Production-grade LinkedIn job scraper. Multi-keyword, multi-location, JSON-LD enrichment, parallel detail fetch, real typed fields, dedup, XLSX/CSV/JSON export.

What it does
Search LinkedIn by job title × location and return a clean, enriched dataset. Every row includes the basics (title, company, location, date, Easy Apply, URL) plus the fields that actually matter for recruiting, sourcing, and market research:
- Salary (
salaryMin,salaryMax,salaryCurrency,salaryUnit,salaryRaw) — parsed from JSON-LDbaseSalaryor inline ranges - Company enrichment (
companyUrl,companySlug,companyLogoUrl) — from JSON-LDhiringOrganizationor card HTML - Job classification (
industry,jobFunction,experienceLevel,employmentType) - Applicants —
applicantsCountis an integer (47),applicantsRawis the original text ("47 applicants") - Recency (
postedDate,postedTimeAgo,isNew,badge) - Full description (
jobDescription) + optionaldescriptionHtml - Direct apply flag (
directApply,easyApplyas booleans) - Search provenance (
searchKeyword,searchLocation,scrapedAt)
Pricing
$0.50 per 1,000 jobs (pay per result, no monthly minimum).
Compared to:
valig/linkedin-jobs-scraper: $0.40/1k — cheaper per job, more fields, parallel fetchbebity/linkedin-jobs-scraper: $15–29.99/month flat — no per-job pricing, capped by month
How it works
- Phase 1 — listing scrape (
guest API): pulls cards fromlinkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/searchfor every (title × location) combo. No login, no auth wall. - Dedup by
jobIdacross the whole run. - Phase 2 — parallel detail fetch with
asyncio.gather+asyncio.Semaphore(concurrency). Each detail page is parsed forJobPostingJSON-LD (most rich fields live here) and BeautifulSoup is used for fields JSON-LD doesn't carry (applicants, seniority, Easy Apply button). - Optional XLSX/CSV export to the run's Key-Value Store.
- Push to dataset with strict typing: bools are bools, counts are ints, missing data is
null.
Input
| Field | Type | Default | Description |
|---|---|---|---|
job_titles | string list | ["Head of Engineering"] | Titles to search (required) |
locations | string list | ["United States"] | LinkedIn location strings |
days_posted | integer | 60 | Filter by posting recency (1–365) |
max_jobs_per_keyword | integer | 200 | Per-(title × location) cap, 8 pages max |
seniority_levels | select | 4,5,6 | LinkedIn f_E codes |
work_type | select | All | On-site / Remote / Hybrid / All |
employment_types | select | All | f_JT codes |
easy_apply_only | bool | false | Restrict to Easy Apply |
fetch_job_details | bool | true | Visit each job page for full data |
use_apify_proxy | bool | true | RESIDENTIAL proxy, per-request rotation on both listing and detail calls |
concurrency | integer | 10 | Parallel detail-fetch workers (1–20) |
listing_concurrency | integer | 8 | Parallel (title × location) combos, each gets its own proxy |
min_seniority | integer | 0 | Post-fetch seniority filter (0–5, 0 = no filter) |
max_results | integer | 500 | Cap on final output (after fit-score sort) |
include_description_html | bool | false | Add raw HTML field (large) |
min_salary | integer | 0 | Drop jobs below this salary (in source currency) |
output_format | select | json | json / xlsx / csv / all |
Example input
{"job_titles": ["Head of Engineering", "VP of Technology", "Delivery Director"],"locations": ["India", "United States", "United Kingdom"],"days_posted": 30,"max_jobs_per_keyword": 50,"seniority_levels": "5,6","work_type": "2","fetch_job_details": true,"use_apify_proxy": true,"concurrency": 8,"output_format": "all"}
Example output
{"jobId": "4418924625","title": "Senior Director, AI Product Operations & Solutions","company": "Blue Machines AI","companyUrl": "https://www.linkedin.com/company/blue-machines-ai","companySlug": "blue-machines-ai","companyLogoUrl": "https://media.licdn.com/.../blue_machines_ai_logo","location": "Mumbai, Maharashtra, India","postedDate": "2026-05-26T08:00:00.000Z","postedTimeAgo": "1 day ago","isNew": true,"badge": "Actively Hiring","salaryMin": 5000000,"salaryMax": 8000000,"salaryCurrency": "₹","salaryUnit": "year","salaryRaw": "₹50,00,000 - ₹80,00,000 a year","easyApply": false,"remoteHybrid": false,"employmentType": "Full-time","experienceLevel": "Director","jobFunction": "Information Technology","industry": "Software Development","applicantsCount": 47,"applicantsRaw": "47 applicants","validThrough": "2026-07-26T00:00:00.000Z","directApply": false,"jobDescription": "We are looking for a Senior Director...","jobUrl": "https://in.linkedin.com/jobs/view/4418924625","searchKeyword": "Delivery Director","searchLocation": "India","scrapedAt": "2026-06-23T10:15:00.000Z"}
Output formats
- JSON — always pushed to the dataset. Pipe straight to
apify-client, BigQuery, or a NoSQL store. - XLSX — written to the run's Key-Value Store as
jobs-<runId>.xlsxwhenoutput_format=xlsxorall. Opens in Excel/Sheets with auto-typed columns. - CSV — written to the run's Key-Value Store as
jobs-<runId>.csvwhenoutput_format=csvorall.
Performance
| Run | Combos | Detail fetch | Est. time (concurrent=5) | Est. time (concurrent=10) |
|---|---|---|---|---|
| Quick scan, no details | 10 × 2 | off | ~5 min | ~5 min |
| Standard | 10 × 2 | on | ~20 min | ~12 min |
| Deep run | 30 × 4 | on | ~2.5 hrs | ~1.5 hrs |
Limitations
- LinkedIn's guest API is unauthenticated. The card HTML is reliable; the detail HTML occasionally hits a soft auth wall (job is then pushed with
jobDescription=""and the URL is preserved). - Some fields (salary, applicants) are not on every posting — nulls are expected.
- LinkedIn rotates its HTML classes; this version pins the Q2 2026 class set and falls back to JSON-LD for resilience.
License & ToS
This actor is for personal use, research, and licensed commercial use. Respect LinkedIn's ToS and applicable data-protection laws (GDPR, etc.) when storing personal data.