LinkedIn Jobs Scraper Unlimited avatar

LinkedIn Jobs Scraper Unlimited

Pricing

from $0.20 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper Unlimited

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

Mukesh Kumar

Maintained by Community

Actor stats

3

Bookmarked

8

Total users

5

Monthly active users

2 days ago

Last modified

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_cffi to 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:

  1. Builds your search query from keywords, location, geoId, companyId, companyName, jobType, workType, experienceLevel, and datePosted.
  2. Detects when the result set approaches the 1,000-result wall.
  3. Automatically slices the query into smaller time windows until the entire result space is covered.
  4. Fetches detail pages in parallel (with concurrency limits and randomized delays).
  5. Deduplicates by jobId across 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.

FieldTypeDefaultDescription
keywordsstring"python developer"Job search keywords (e.g., "data engineer", "product manager", "react developer").
locationstring"United States"Free-text location (e.g., "San Francisco", "Remote", "London, UK").
geoIdstringLinkedIn geoId for precise location targeting. Overrides location when provided. Find it in the LinkedIn search URL.
companyNamearray of string[]Filter by employer names (e.g., ["Google", "Microsoft"]). Leave empty for all companies.
companyIdarray of string[]Filter by LinkedIn numeric company IDs (e.g., ["1441", "1035"]). Found in the company's LinkedIn URL.
datePostedenum string"anyTime"One of: anyTime, pastMonth, pastWeek, past24Hours.
workTypearray of string[]Workplace filter: onSite, remote, hybrid.
jobTypearray of string[]Employment type: fullTime, partTime, contract, temporary, volunteer, internship.
experienceLevelarray of string[]Seniority: internship, entryLevel, associate, midSenior, director, executive.
maxResultsinteger100Maximum jobs to scrape. Set 0 for unlimited.
scrapeJobDetailsbooleantrueFetch full job descriptions per listing. Slower, but returns richer data.
maxConcurrencyinteger5Max parallel detail-page requests (1–20).
minDelayinteger1000Minimum delay between requests in milliseconds (≥ 500).
maxDelayinteger3000Maximum delay between requests in milliseconds (≥ 1000).
proxyConfigobjectApify ResidentialApify 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:

FieldTypeDescription
jobIdstringLinkedIn's unique numeric job ID.
titlestringJob title.
companyNamestring | nullEmployer name.
companyIdstring | nullLinkedIn numeric company ID.
companyUrlstring | nullLink to the company's LinkedIn page.
locationstring | nullJob location (e.g., "San Francisco, CA").
postedTimestring | nullHuman-readable posting time (e.g., "2 days ago").
publishedAtstring | nullISO timestamp when the job was first posted.
applicationsCountstring | nullNumber of applicants (e.g., "42 applicants").
workTypestring | nullRemote, Hybrid, or On-site.
experienceLevelstring | nullSeniority (e.g., "Mid-Senior level").
contractTypestring | nullEmployment type (e.g., "Full-time").
descriptionstring | nullFull job description text (when scrapeJobDetails is true).
jobUrlstringCanonical LinkedIn job URL.
applyUrlstring | nullExternal or LinkedIn apply URL.
applyTypestring | nullEasyApply, OffsiteApply, etc.
benefitsstring | nullBenefits text when present.
sectorstring | nullIndustry / sector.
salarystring | nullSalary 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 geoId for precise locations. Free-text locations occasionally match the wrong city.
  • Combine companyName + datePosted: pastWeek to monitor hiring at specific employers.
  • Set maxResults: 0 for full coverage; the slicing logic handles the 1,000-result cap automatically.
  • Lower maxConcurrency and raise minDelay / maxDelay if 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 check
make typecheck # mypy --strict
make test # pytest
make 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.