LinkedIn Jobs Scraper - No Cookies, Fast & Cheap avatar

LinkedIn Jobs Scraper - No Cookies, Fast & Cheap

Pricing

Pay per usage

Go to Apify Store
LinkedIn Jobs Scraper - No Cookies, Fast & Cheap

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

Andrew Babo

Maintained by Community

Actor stats

0

Bookmarked

19

Total users

5

Monthly active users

7 days ago

Last modified

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:

FieldNotes
jobId, linkCanonical LinkedIn job URL
title, companyName, companyLinkedinUrl, companyLogoFrom the search card
location, postedAt, postedAtTextISO date + original relative text
descriptionText, descriptionHtmlFull posting body (detail mode)
seniorityLevel, employmentType, jobFunction, industriesLinkedIn job criteria
applyUrl, applyMethodDirect apply target, incl. off-site employer URLs
applicantsCount, salaryInfoWhen LinkedIn exposes them publicly
queryThe 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 actorcurious_coder/linkedin-jobs-scraper
Time24 s69 s
Cost per 1,000 jobs$0.38$2.00
Coverage: title, company, location, posted date, full description, seniority, employment type, function, industries, logo, applicants100%100%
Blocked requests00

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.

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 posts
for 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 the
listing 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.