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
Actor stats
0
Bookmarked
17
Total users
1
Monthly active users
6 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.
๐ LinkedIn Jobs Scraper Pro
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.
