LinkedIn Jobs Scraper - No Cookies, Fast & Cheap
Pricing
Pay per usage
LinkedIn Jobs Scraper - No Cookies, Fast & Cheap
Scrape LinkedIn job postings without a login or cookies: title, company, location, salary, posted date, full description, seniority, employment type, industries and apply links. HTTP-first engine, no browser, from $0.30 per 1,000 jobs. Export CSV, Excel, JSON.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Andrew Babo
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
5
Monthly active users
7 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper — No Cookies, Fast & Cheap
Scrape LinkedIn job postings without a login, account or li_at cookie. The actor talks to LinkedIn's public guest job surface over plain HTTP — no browser, no Playwright — so it is fast, cheap and easy to run at scale.
What you get
Every job record contains:
| Field | Notes |
|---|---|
jobId, link | Canonical LinkedIn job URL |
title, companyName, companyLinkedinUrl, companyLogo | From the search card |
location, postedAt, postedAtText | ISO date + original relative text |
descriptionText, descriptionHtml | Full posting body (detail mode) |
seniorityLevel, employmentType, jobFunction, industries | LinkedIn job criteria |
applyUrl, applyMethod | Direct apply target, incl. off-site employer URLs |
applicantsCount, salaryInfo | When LinkedIn exposes them publicly |
query | The search term / location that produced the row |
Two modes, two prices
- List only (
scrapeJobDetails: false) — one request returns 10 job cards, so a thousand jobs cost a fraction of a cent of compute. Best for monitoring, dedup pipelines and building a job-ID universe. - Full detail (
scrapeJobDetails: true, default) — one extra request per job adds description, criteria, apply URL and salary.
Measured head-to-head (real runs, not estimates)
data analyst in Singapore, 20 jobs, sequential runs on the same day:
| This actor | curious_coder/linkedin-jobs-scraper | |
|---|---|---|
| Time | 24 s | 69 s |
| Cost per 1,000 jobs | $0.38 | $2.00 |
| Coverage: title, company, location, posted date, full description, seniority, employment type, function, industries, logo, applicants | 100% | 100% |
| Blocked requests | 0 | 0 |
2.8x faster and about 5x cheaper for the same fields. Fields LinkedIn hides from logged-out visitors (employer apply URL, salary, job poster name) are unavailable to both.
Input
{"searchTerms": ["software engineer"],"location": "Singapore","datePosted": "pastWeek","workplaceType": ["2"],"maxItems": 500,"scrapeJobDetails": true,"speedMode": "turbo"}
You can also pass startUrls (any LinkedIn jobs search URL), geoId, distance, experienceLevel, jobType, companyIds, easyApplyOnly and sortBy.
Honest limits without a cookie
LinkedIn's public guest pages simply do not contain these, so no cookie-free scraper can return them:
- the name of the job poster / hiring manager
- the exact applicant count (guest pages show buckets such as "Over 200 applicants")
- LinkedIn salary insights (only salary written into the posting itself is returned)
- each query is capped by LinkedIn at 1,000 results — split by city, date range or industry to go beyond it
liAtCookie is an optional input. It is never required, and we recommend leaving it empty.
Proxy
Use Apify residential proxies for best results. LinkedIn rate-limits per IP; the actor runs many slow, warmed-up sessions in parallel instead of one fast one, and rotates any IP that gets a 999.
Output
Export to CSV, Excel, JSON or JSONL, or pull the dataset via API. Run statistics — pages fetched, blocked requests, per-field coverage — are stored in the key-value store under STATS.
Company details on every job (new)
Set scrapeCompanyDetails: true and each job also carries its employer's real data:
companyWebsite, companyEmployeesCount, companyEmployeeCountRange, companyIndustry,
companyAddress, companyCountry, companyDescription, companyFoundedOn.
Employers repeat across a search, so each company page is fetched once per unique employer
and cached for 30 days — 500 jobs from 80 employers costs 80 extra requests, not 500.
The deduplicated employer list (with websites) is written to the key-value store under
COMPANIES, and pushCompanies: true also appends it to the dataset — ready as the input
for a company-enrichment pipeline.
Measured run (25 jobs, Singapore, residential proxy): coverage companyEmployeesCount 100%,
companyIndustry 100%, companyWebsite 96%, companyAddress / companyCountry 96%,
0 blocked requests, ≈ $0.73 per 1,000 jobs with company enrichment on.
datePosted accepts both spellings: pastWeek/pastMonth and the shorter week/month.
includeRunSummary is now off by default, so the dataset contains job rows only; the
summary (counts, blocked requests, stopReason, estimatedCostUsd, costPer1000Usd) is
always written to STATS.
For AI agents (MCP-ready)
This actor is built to be called by AI agents. It works out of the box with the Apify MCP Server — add it to Claude Desktop, Cursor or any MCP client: the agent can monitor job postings on its own.
{"mcpServers": {"linkedin-jobs-scraper": {"url": "https://mcp.apify.com/?actors=andrew_babo/linkedin-jobs-scraper","headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }}}}
Agent skill (paste into your agent's instructions)
Use the "linkedin-jobs-scraper" tool to collect public LinkedIn job postsfor a role, location or company: title, company, location, posted date,seniority, employment type, description and apply URL. No cookies needed.Good for hiring-signal research, job alerts and talent-market analysis.HOW TO CALL- { "searchTerms": ["software engineer"], "location": "Singapore","datePosted": "past_week", "maxItems": 100 }- Filter with "experienceLevel", "jobType", "workplaceType","companyIds", "easyApplyOnly".- Hiring signals for specific accounts: pass "companyIds" and set"scrapeCompanyDetails" only when company data is really needed.- "scrapeJobDetails": false is much cheaper when the user only wants thelisting rows.OUTPUT CONTRACT- One row per job posting with the fields above.- Empty results mean no posting matched the filters in the scraped window —say so and suggest widening "datePosted" or terms; never invent postings,salaries or apply links.