LinkedIn Jobs Scraper — No Login, No Cookies avatar

LinkedIn Jobs Scraper — No Login, No Cookies

Pricing

from $2.00 / 1,000 job scrapeds

Go to Apify Store
LinkedIn Jobs Scraper — No Login, No Cookies

LinkedIn Jobs Scraper — No Login, No Cookies

Scrape LinkedIn job postings by keyword and location: title, company, location, posting date and apply link. Filter by date posted, experience, job type and remote. No login, no cookies.

Pricing

from $2.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Mohanad Alshaka

Mohanad Alshaka

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Scrape LinkedIn job postings by keyword and location: title, company, location, posting date and apply link. Filter by date posted, experience level, job type and remote status.

No login. No cookies. No session credentials to supply or keep alive.

Output

{
"jobId": "4467038602",
"title": "Senior Data Engineer",
"company": "Haystack",
"companyUrl": "https://uk.linkedin.com/company/wearehaystack",
"location": "London, England, United Kingdom",
"postedDate": "2026-09-14",
"postedText": "7 hours ago",
"salary": null,
"companyLogo": "https://media.licdn.com/...",
"isEasyApply": false,
"url": "https://uk.linkedin.com/jobs/view/senior-data-engineer-at-haystack-4467038602",
"searchKeywords": "data engineer",
"searchLocation": "London"
}

postedDate is a real ISO date taken from LinkedIn's own datetime attribute, not derived from "7 hours ago". Both are returned.

Every row records the search that produced it, so one run can cover many keyword and location pairs and stay sortable afterwards.

What this does and does not cover

This reads LinkedIn's public guest job feed. That surface answers without authentication and is the only one that does.

Profiles, company pages and connection data are not included and are not attempted. Those require authentication and heavy proxying, and an Actor that claimed to scrape them from a plain request would be selling something it cannot deliver.

It reports its own breakage

This is HTML, not an API, so LinkedIn can change the markup at any time. The failure mode that matters is subtle: cards keep arriving, fields stop matching, and a scraper that only counts its own output reports a successful run that returned nothing.

Every page therefore compares cards seen against cards parsed. If cards arrive but stop parsing, the run logs it and RUN_SUMMARY counts it. A test injects exactly that defect — ten cards with changed markup — and asserts the run is flagged unhealthy rather than passing silently.

An empty response is treated as the end of results, not as breakage.

Input

FieldWhat it does
searchesObjects with keywords and/or location. Several can run in one job.
maxJobsPerSearchCap per search, and therefore on cost. LinkedIn returns 10 per request.
datePostedAny time, past month, past week, past 24 hours.
experienceInternship through Executive, using LinkedIn's own levels.
jobTypeFull-time, part-time, contract, temporary, internship, volunteer.
workplaceOn-site, remote or hybrid.

Example: remote senior roles posted this week

{
"searches": [
{ "keywords": "data engineer", "location": "London" },
{ "keywords": "product manager", "location": "Dubai" }
],
"maxJobsPerSearch": 200,
"datePosted": "week",
"experience": "mid_senior",
"workplace": "remote"
}

Notes and limits

  • Public job postings only, exactly as an unauthenticated visitor sees them.
  • Salary appears only where the employer published it, which is a minority of postings. It is returned as null rather than estimated.
  • Duplicate job IDs within one search are removed automatically.
  • LinkedIn rate-limits aggressively. The default delay is deliberately conservative; lower it only if the log shows no throttling.
  • The guest feed exposes a finite result window per search. Narrow the keywords or location rather than raising maxJobsPerSearch to reach deeper.

Development

npm install
npm test
node src/main.js