⚡️fast-linkedin-jobs-scraper
Pricing
from $0.50 / 1,000 results
⚡️fast-linkedin-jobs-scraper
⚡ BLAZING FAST — hundreds of LinkedIn jobs in seconds, not minutes. Pure HTTP means ZERO browser overhead and no login. Titles, companies, logos, locations, remote/hybrid, dates, links. Filter by keyword, location, date posted, job type, experience. Optional salary.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
ABHIJEET S
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
LinkedIn Jobs Scraper — Apify Actor
🚀 Fast, HTTP-only LinkedIn job scraper — no browser, no login, no cookies required.
This Apify actor scrapes job listings from LinkedIn's public guest-accessible endpoints using Crawlee's CheerioCrawler, making it significantly faster and cheaper than browser-based alternatives.
Features
- ⚡ HTTP-only scraping — No Playwright/Puppeteer overhead. Pure HTTP + Cheerio parsing.
- 🔓 No login required — Uses LinkedIn's guest job search endpoints.
- 🔍 Rich filtering — Keywords, location, date posted, job type, experience level, remote/hybrid/on-site.
- 📄 Optional detail scraping — Get full job descriptions, seniority level, industry, and more.
- 🔄 Auto-pagination — Automatically paginates through search results.
- 🛡️ Anti-blocking — Session pool, proxy rotation, rate limiting, and retries built-in.
- 📊 Structured output — Clean JSON dataset ready for further processing.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | ["Software Engineer"] | Job search keywords |
location | string | "United States" | Location filter |
maxItems | integer | 100 | Maximum jobs to scrape (1–1000) |
scrapeJobDetails | boolean | false | Scrape full job descriptions (slower) |
datePosted | enum | "any" | any, past24hours, pastWeek, pastMonth |
jobType | enum | "any" | any, fullTime, partTime, contract, temporary, internship |
experienceLevel | enum | "any" | any, internship, entryLevel, associate, midSenior, director, executive |
remoteFilter | enum | "any" | any, onSite, remote, hybrid |
includeSalary | boolean | false | Fetch pay for each job. Much slower — one extra request per job. All jobs are still returned; salary is null when not disclosed. |
maxConcurrency | integer | 5 | Concurrent requests (1–20) |
proxyConfiguration | object | — | Apify proxy settings |
resumeFromPreviousRun | boolean | false | Skip jobs/companies already scraped in a prior run (persisted in the key-value store) |
outputFields | string[] | [] (all fields) | Restrict pushed records to these fields, plus id fields |
webhookUrl | string | — | URL to POST JSON run events to (HIGH_ERROR_RATE, COMPLETED) |
notifyOnCompletion | boolean | false | Send a webhook event when the run finishes |
errorRateThreshold | number | 0.3 | Blocked/failed request ratio that triggers automatic concurrency throttling and a webhook alert |
Example Input
{"searchQueries": ["Data Scientist", "Machine Learning Engineer"],"location": "San Francisco","maxItems": 50,"scrapeJobDetails": true,"datePosted": "pastWeek","jobType": "fullTime","remoteFilter": "remote","maxConcurrency": 3}
Output
Each job listing produces a JSON object like:
{"jobId": "3912345678","title": "Senior Data Scientist","company": "Acme Corp","location": "San Francisco, CA (Remote)","salary": "$150,000 - $200,000","postedDate": "2024-01-15","jobUrl": "https://www.linkedin.com/jobs/view/3912345678","scrapedAt": "2024-01-16T10:30:00.000Z","description": "We are looking for a Senior Data Scientist...","seniorityLevel": "Mid-Senior level","employmentType": "Full-time","jobFunction": "Engineering and Information Technology","industries": "Technology, Information and Internet","applicants": "Over 200 applicants","companyUrl": "https://www.linkedin.com/company/acme-corp"}
Note: Fields like
description,seniorityLevel, etc. are only available whenscrapeJobDetailsis enabled.
Resilience & Anti-Blocking
- 429-aware backoff — on a rate-limit or block response, the actor retires the session, waits with exponential backoff (2s → 4s → 8s… capped at 60s, with jitter), and retries with a fresh session/proxy.
- Challenge/checkpoint detection — LinkedIn sometimes returns a login-wall or bot-checkpoint page with a
200status. The actor scans response bodies for these patterns and treats them as failures so they get retried like any other block. - Adaptive concurrency — if the rolling blocked-request rate exceeds
errorRateThreshold(default 30%), the actor automatically halves its concurrency ceiling and (optionally) fires a webhook alert. - Resumable runs — with
resumeFromPreviousRun: true, the actor loads the job/company IDs it saw last time from the key-value store and skips them, so a scheduled/recurring run only scrapes what's new.
Structured Output Extras
In addition to the raw salary and location strings, each job record includes parsed breakdowns:
{"salary": "$150,000 - $200,000","salaryParsed": { "min": 150000, "max": 200000, "currency": "USD", "period": "yearly", "raw": "$150,000 - $200,000" },"location": "San Francisco, CA","locationParsed": { "city": "San Francisco", "state": "CA", "country": null, "raw": "San Francisco, CA" }}
Use outputFields in the input if you'd rather receive a trimmed record (e.g. ["title", "company", "salaryParsed"]) instead of the full object.
Performance Tips
- Keep
scrapeJobDetailsoff for fastest results — listing data is scraped in bulk from search pages. - Use
maxConcurrency: 3-5for a good balance of speed and reliability. - Use Apify residential proxies for best success rates against LinkedIn's anti-bot systems.
- Filter aggressively — Use specific keywords and filters to reduce the number of pages to scrape.
Running Locally
# Install dependenciesnpm install# Run with Apify CLIapify run --input '{"searchQueries": ["Software Engineer"], "maxItems": 10}'# Or run directlynpm start
Deployment
# Login to Apifyapify login# Deploy to Apify platformapify push
How It Works
- Builds search URLs from your input parameters, targeting LinkedIn's guest job search API endpoint.
- Fetches search result pages using pure HTTP requests (CheerioCrawler) — no browser rendering needed.
- Parses job cards from the HTML response using Cheerio (jQuery-like selectors).
- Paginates automatically by incrementing the
startparameter (25 jobs per page). - Optionally fetches detail pages for each job to extract full descriptions and metadata.
- Outputs structured data to the Apify dataset in JSON format.
Legal Disclaimer
This actor is intended for personal and educational use. Scraping LinkedIn may violate their Terms of Service. Users are responsible for ensuring compliance with applicable laws and LinkedIn's User Agreement. Use at your own risk.
License
ISC