LinkedIn Jobs Scraper Pro avatar

LinkedIn Jobs Scraper Pro

Pricing

Pay per usage

Go to Apify Store
LinkedIn Jobs Scraper Pro

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

Sonal Sharma

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

1

Monthly active users

17 days ago

Last modified

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-LD baseSalary or inline ranges
  • Company enrichment (companyUrl, companySlug, companyLogoUrl) — from JSON-LD hiringOrganization or card HTML
  • Job classification (industry, jobFunction, experienceLevel, employmentType)
  • ApplicantsapplicantsCount is an integer (47), applicantsRaw is the original text ("47 applicants")
  • Recency (postedDate, postedTimeAgo, isNew, badge)
  • Full description (jobDescription) + optional descriptionHtml
  • Direct apply flag (directApply, easyApply as 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 fetch
  • bebity/linkedin-jobs-scraper: $15–29.99/month flat — no per-job pricing, capped by month

How it works

  1. Phase 1 — listing scrape (guest API): pulls cards from linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search for every (title × location) combo. No login, no auth wall.
  2. Dedup by jobId across the whole run.
  3. Phase 2 — parallel detail fetch with asyncio.gather + asyncio.Semaphore(concurrency). Each detail page is parsed for JobPosting JSON-LD (most rich fields live here) and BeautifulSoup is used for fields JSON-LD doesn't carry (applicants, seniority, Easy Apply button).
  4. Optional XLSX/CSV export to the run's Key-Value Store.
  5. Push to dataset with strict typing: bools are bools, counts are ints, missing data is null.

Input

FieldTypeDefaultDescription
job_titlesstring list["Head of Engineering"]Titles to search (required)
locationsstring list["United States"]LinkedIn location strings
days_postedinteger60Filter by posting recency (1–365)
max_jobs_per_keywordinteger200Per-(title × location) cap, 8 pages max
seniority_levelsselect4,5,6LinkedIn f_E codes
work_typeselectAllOn-site / Remote / Hybrid / All
employment_typesselectAllf_JT codes
easy_apply_onlyboolfalseRestrict to Easy Apply
fetch_job_detailsbooltrueVisit each job page for full data
use_apify_proxybooltrueRESIDENTIAL proxy, per-request rotation on both listing and detail calls
concurrencyinteger10Parallel detail-fetch workers (1–20)
listing_concurrencyinteger8Parallel (title × location) combos, each gets its own proxy
min_seniorityinteger0Post-fetch seniority filter (0–5, 0 = no filter)
max_resultsinteger500Cap on final output (after fit-score sort)
include_description_htmlboolfalseAdd raw HTML field (large)
min_salaryinteger0Drop jobs below this salary (in source currency)
output_formatselectjsonjson / 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>.xlsx when output_format=xlsx or all. Opens in Excel/Sheets with auto-typed columns.
  • CSV — written to the run's Key-Value Store as jobs-<runId>.csv when output_format=csv or all.

Performance

RunCombosDetail fetchEst. time (concurrent=5)Est. time (concurrent=10)
Quick scan, no details10 × 2off~5 min~5 min
Standard10 × 2on~20 min~12 min
Deep run30 × 4on~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.