LinkedIn Jobs Scraper — No Login, No Cookies
Pricing
from $2.00 / 1,000 job scrapeds
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
Maintained by CommunityActor 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
| Field | What it does |
|---|---|
searches | Objects with keywords and/or location. Several can run in one job. |
maxJobsPerSearch | Cap per search, and therefore on cost. LinkedIn returns 10 per request. |
datePosted | Any time, past month, past week, past 24 hours. |
experience | Internship through Executive, using LinkedIn's own levels. |
jobType | Full-time, part-time, contract, temporary, internship, volunteer. |
workplace | On-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
nullrather 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
maxJobsPerSearchto reach deeper.
Development
npm installnpm testnode src/main.js