LinkedIn Jobs Scraper (No Login) avatar

LinkedIn Jobs Scraper (No Login)

Pricing

Pay per usage

Go to Apify Store
LinkedIn Jobs Scraper (No Login)

LinkedIn Jobs Scraper (No Login)

Scrape public LinkedIn job listings by keyword, location or search URL. No cookies, no account. Exports title, company, salary, description, seniority, applicants and more.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Genius_Coder Sam

Genius_Coder Sam

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Scrape public LinkedIn job listings by keyword, location or search URL, and export clean structured data (JSON, CSV, Excel, API). No LinkedIn account, no cookies, no login — the Actor reads the same public job pages any logged-out visitor can see.

What you get

For every job:

FieldExample
id, url4012345678, https://www.linkedin.com/jobs/view/…
title, companyName, companyUrl, companyLogoSenior Software Engineer, Acme Corp
location, postedAt, postedAtTextBangkok, Thailand, 2026-09-18, 3 days ago
salary฿120,000/mo - ฿180,000/mo (when the employer shows it)
employmentType, seniorityLevel, jobFunction, industriesFull-time, Mid-Senior level …
applicantsCount, applicantsText200, Over 200 applicants
applyUrlexternal apply link (when the job applies off-LinkedIn)
descriptionText, descriptionHtmlfull job description
search, scrapedAtwhich search produced it, ISO timestamp

How to use

  1. Either paste one or more search URLs copied from linkedin.com/jobs/search (set your filters on LinkedIn first), or enter keywords and locations (one search per pair).
  2. Optionally set date posted, experience level, job type, workplace type.
  3. Set Maximum jobs — you pay per job returned, so this is your budget cap.
  4. Run. Download results from the Output tab or use the API.

Example input

{
"keywords": ["data engineer"],
"locations": ["Bangkok, Thailand", "Singapore"],
"datePosted": "week",
"workplaceType": ["remote", "hybrid"],
"maxItems": 500,
"scrapeJobDetails": true
}

Example output (trimmed)

{
"id": "4012345678",
"url": "https://www.linkedin.com/jobs/view/senior-software-engineer-at-acme-4012345678",
"title": "Senior Software Engineer",
"companyName": "Acme Corp",
"location": "Bangkok, Bangkok City, Thailand",
"postedAt": "2026-09-18",
"employmentType": "Full-time",
"seniorityLevel": "Mid-Senior level",
"applicantsCount": 200,
"descriptionText": "About the role …"
}

Options worth knowing

  • Scrape full job details — on (default) opens every job page for the description and metadata; off gives a faster, cheaper listing-only run.
  • Break the 1,000-result limit — LinkedIn shows at most ~1,000 results per search. When a search hits that limit, the Actor automatically splits it by job type, experience level and workplace type to reach more jobs, and de-duplicates across the splits. In practice this has diminishing returns for broad searches: LinkedIn's job-type/experience/workplace facets tend to overlap heavily with the unfiltered top 1,000, so a split can spend a lot of extra requests (and proxy budget) re-fetching jobs you already have before it turns up genuinely new ones. It's most worth enabling for narrower searches, or when you specifically need more than ~1,000 results and are prepared to pay for the extra paging.
  • Proxy — residential proxies are strongly recommended. LinkedIn blocks datacenter IPs.
  • Max concurrency — lower it if you see blocked requests.

Limits and honest notes

  • Only publicly visible data is collected. Anything that requires logging in (e.g. some recruiter details, "insights") is not available.
  • applyUrl is almost always null. LinkedIn now hides the real apply target (internal or external) behind a "sign in to apply" modal for logged-out visitors, so this field can only be populated on the rare posting that still leaks it in guest markup.
  • salary reflects the employer-provided pay range and is only present when LinkedIn shows one; most postings don't have it.
  • LinkedIn changes its pages and blocking rules often. If a run returns fewer jobs than expected, retry with lower concurrency; report persistent problems in the Issues tab.
  • Results depend on what LinkedIn shows logged-out visitors for your query and location, and may differ from what you see when signed in.

The Actor accesses only public pages without logging in. Laws and platform terms differ by country and by how you use the data, and LinkedIn's User Agreement restricts automated access. You are responsible for using the data lawfully — in particular, do not use it to profile private individuals, and comply with GDPR/CCPA if you store any personal data (such as recruiter names). This is not legal advice.

Local development

npm install
npm test # parser + query unit tests (offline)
npm run test:e2e # full actor run against a local mock of LinkedIn's endpoints
apify run # run locally with storage/key_value_stores/default/INPUT.json
apify push # deploy to your Apify account

Selectors and endpoint URLs live in src/linkedin.js only — that is the file to update when LinkedIn changes its markup.