LinkedIn Jobs Scraper Unlimited
Pricing
from $0.20 / 1,000 results
LinkedIn Jobs Scraper Unlimited
Scrape LinkedIn job listings with no result cap. Extracts full job details including title, company, location, description, and more.
Pricing
from $0.20 / 1,000 results
Rating
5.0
(1)
Developer
Mukesh Kumar
Maintained by CommunityActor stats
3
Bookmarked
8
Total users
5
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper Unlimited — Scrape LinkedIn Jobs Without Limits
Scrape LinkedIn job listings at scale with no 1,000-result cap. This Apify Actor extracts unlimited LinkedIn jobs by keyword, company, location, experience level, work type, and date posted — returning structured JSON data including job title, company name, salary, description, apply URL, seniority level, and more.
Whether you're building a job board, sourcing leads for a recruiting agency, monitoring competitor hiring, or feeding an AI/ML training pipeline, this scraper delivers clean, structured LinkedIn jobs data fast.
Keywords:
linkedin scraper,linkedin jobs scraper,linkedin jobs api,scrape linkedin jobs,linkedin job search,linkedin job listings,linkedin job postings,linkedin recruiter scraper,job board scraper,unlimited linkedin scraper,linkedin jobs export csv json excel.
Why use this LinkedIn Jobs Scraper?
- Unlimited results — bypasses LinkedIn's 1,000-job cap via automatic time-window slicing.
- No login required — scrapes public LinkedIn guest endpoints; no LinkedIn account or cookies needed.
- Full job details — extracts the complete job description, seniority, employment type, company info, apply URL, salary, and more.
- Company filters — target specific employers by LinkedIn company name or company ID.
- Smart deduplication — removes duplicate listings across overlapping search slices.
- TLS fingerprint spoofing — uses
curl_cffito mimic real Chrome traffic and reduce blocks. - Residential proxies — built-in support for Apify Residential Proxy.
- Configurable rate limits — tune concurrency and delays to stay safe.
- Multiple export formats — JSON, CSV, Excel, XML, HTML via Apify Dataset.
Use cases
- Recruiting & sourcing — Build candidate pipelines or monitor open roles by industry.
- Job aggregator platforms — Power your own job board with fresh LinkedIn listings.
- Market & salary research — Track hiring trends, in-demand skills, and compensation benchmarks.
- Competitor intelligence — Monitor which roles competitors are hiring for and where.
- Lead generation — Identify companies actively hiring (a strong buying signal for B2B SaaS).
- AI/ML training data — Generate large, structured datasets of job postings for NLP models.
How it works
LinkedIn caps any single job search at ~1,000 results. To break that ceiling, this actor:
- Builds your search query from
keywords,location,geoId,companyId,companyName,jobType,workType,experienceLevel, anddatePosted. - Detects when the result set approaches the 1,000-result wall.
- Automatically slices the query into smaller time windows until the entire result space is covered.
- Fetches detail pages in parallel (with concurrency limits and randomized delays).
- Deduplicates by
jobIdacross slices before pushing to the dataset.
The result: a complete, clean dataset of every LinkedIn job that matches your filters — far beyond what the LinkedIn UI exposes.
Input schema
Configure the scraper with the following fields. Only keywords is typically needed for a basic run; all other fields are optional filters.
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string | "python developer" | Job search keywords (e.g., "data engineer", "product manager", "react developer"). |
location | string | "United States" | Free-text location (e.g., "San Francisco", "Remote", "London, UK"). |
geoId | string | — | LinkedIn geoId for precise location targeting. Overrides location when provided. Find it in the LinkedIn search URL. |
companyName | array of string | [] | Filter by employer names (e.g., ["Google", "Microsoft"]). Leave empty for all companies. |
companyId | array of string | [] | Filter by LinkedIn numeric company IDs (e.g., ["1441", "1035"]). Found in the company's LinkedIn URL. |
datePosted | enum string | "anyTime" | One of: anyTime, pastMonth, pastWeek, past24Hours. |
workType | array of string | [] | Workplace filter: onSite, remote, hybrid. |
jobType | array of string | [] | Employment type: fullTime, partTime, contract, temporary, volunteer, internship. |
experienceLevel | array of string | [] | Seniority: internship, entryLevel, associate, midSenior, director, executive. |
maxResults | integer | 100 | Maximum jobs to scrape. Set 0 for unlimited. |
scrapeJobDetails | boolean | true | Fetch full job descriptions per listing. Slower, but returns richer data. |
maxConcurrency | integer | 5 | Max parallel detail-page requests (1–20). |
minDelay | integer | 1000 | Minimum delay between requests in milliseconds (≥ 500). |
maxDelay | integer | 3000 | Maximum delay between requests in milliseconds (≥ 1000). |
proxyConfig | object | Apify Residential | Apify Proxy configuration. Residential strongly recommended. |
Example input
{"keywords": "python developer","location": "United States","companyName": ["Google", "Microsoft"],"datePosted": "pastWeek","workType": ["remote", "hybrid"],"jobType": ["fullTime"],"experienceLevel": ["midSenior", "director"],"maxResults": 0,"scrapeJobDetails": true,"maxConcurrency": 5,"minDelay": 1000,"maxDelay": 3000,"proxyConfig": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output schema
Each item pushed to the Apify Dataset is a flat JSON object with the following fields:
| Field | Type | Description |
|---|---|---|
jobId | string | LinkedIn's unique numeric job ID. |
title | string | Job title. |
companyName | string | null | Employer name. |
companyId | string | null | LinkedIn numeric company ID. |
companyUrl | string | null | Link to the company's LinkedIn page. |
location | string | null | Job location (e.g., "San Francisco, CA"). |
postedTime | string | null | Human-readable posting time (e.g., "2 days ago"). |
publishedAt | string | null | ISO timestamp when the job was first posted. |
applicationsCount | string | null | Number of applicants (e.g., "42 applicants"). |
workType | string | null | Remote, Hybrid, or On-site. |
experienceLevel | string | null | Seniority (e.g., "Mid-Senior level"). |
contractType | string | null | Employment type (e.g., "Full-time"). |
description | string | null | Full job description text (when scrapeJobDetails is true). |
jobUrl | string | Canonical LinkedIn job URL. |
applyUrl | string | null | External or LinkedIn apply URL. |
applyType | string | null | EasyApply, OffsiteApply, etc. |
benefits | string | null | Benefits text when present. |
sector | string | null | Industry / sector. |
salary | string | null | Salary range when published. |
Example output
{"jobId": "3912345678","title": "Senior Python Developer","companyName": "Acme Corp","companyId": "1441","companyUrl": "https://www.linkedin.com/company/acme","location": "San Francisco, CA","postedTime": "2 days ago","publishedAt": "2026-05-20T10:14:00.000Z","applicationsCount": "42 applicants","workType": "Remote","experienceLevel": "Mid-Senior level","contractType": "Full-time","description": "We are looking for a Senior Python Developer to join our platform team...","jobUrl": "https://www.linkedin.com/jobs/view/3912345678","applyUrl": "https://acme.com/careers/senior-python-developer","applyType": "OffsiteApply","benefits": "Medical, dental, 401(k), unlimited PTO","sector": "Software Development","salary": "$160,000 – $210,000/yr"}
Pricing & cost estimate
With Apify Residential Proxy at ~$0.50 per 1,000 requests:
- ~2 requests per job (1 search page covers ~25 jobs + 1 detail page).
- ≈ $0.001 per job at steady state with
scrapeJobDetails: true. - Run without detail pages to lower cost ~10x (only summary fields returned).
Export formats
The Apify Dataset can be downloaded in:
- JSON — full structured output (default).
- CSV / Excel (XLSX) — ready for spreadsheets and BI tools.
- XML / HTML / RSS — for integrations.
You can also stream results live via the Apify API or push them to webhooks, S3, BigQuery, or Google Sheets via Apify Integrations.
Tips for better results
- Use
geoIdfor precise locations. Free-text locations occasionally match the wrong city. - Combine
companyName+datePosted: pastWeekto monitor hiring at specific employers. - Set
maxResults: 0for full coverage; the slicing logic handles the 1,000-result cap automatically. - Lower
maxConcurrencyand raiseminDelay/maxDelayif you see rate-limit errors. - Always use residential proxies for large runs to avoid datacenter IP blocks.
FAQ
Does this scraper require a LinkedIn account or cookies? No. It uses LinkedIn's public guest job endpoints — no login, no cookies, no LinkedIn API key.
How is the 1,000-result limit bypassed? LinkedIn returns at most ~1,000 jobs per query. When a search would exceed that, the actor automatically slices the query into smaller time windows and merges + deduplicates the results.
Can I scrape jobs from a specific company?
Yes. Use the companyName array (e.g., ["Google", "Stripe"]) or companyId array for exact LinkedIn company IDs.
Can I scrape remote-only or hybrid jobs?
Yes. Set workType to ["remote"], ["hybrid"], or ["remote", "hybrid"].
Can I export results to Google Sheets, S3, or BigQuery? Yes. Use Apify Integrations or download the dataset as JSON, CSV, or Excel.
Is this legal? This actor scrapes publicly accessible LinkedIn job listings (guest endpoints, no login). It collects no personal data beyond publicly posted job information. Always check LinkedIn's Terms of Service and your jurisdiction's data-collection laws before running large jobs.
Development
pip install -e ".[dev]"make lint # ruff checkmake typecheck # mypy --strictmake test # pytestmake all # lint + typecheck + test
Support & feedback
Found a bug or want a new feature? Open an issue on the Apify Actor page. Pull requests welcome.