LinkedIn Jobs Scraper
Pricing
$0.50 / 1,000 job results
LinkedIn Jobs Scraper
Scrape LinkedIn jobs without login or cookies. Get title, company, location, salary, full description, and company details. Search by keyword or paste a LinkedIn search URL, filter by title, company, or salary, and export to JSON, CSV, or Excel.
Pricing
$0.50 / 1,000 job results
Rating
0.0
(0)
Developer
Dataji
Maintained by CommunityActor stats
0
Bookmarked
16
Total users
5
Monthly active users
a day ago
Last modified
Categories
Share
Extract LinkedIn job postings at scale — no login, no cookies, no account-ban risk.
Collect job data from LinkedIn's public job search — title, company, location, salary, the full description, and rich company details — and export it to JSON, CSV, or Excel. Search by keyword and filters, or just paste a LinkedIn search URL. Because it never logs in, there's no account to get banned.
✨ Features
- 🔍 Search by keyword + filters, or paste LinkedIn search URLs (every filter preserved)
- 🏢 Company details — size, industry, website, HQ, founded year, employee & follower counts
- 💰 Structured salary — parsed into min / max / currency / period
- 🎯 Precise filtering — by title keywords, company, and minimum salary
- 📈 Beyond the 1,000-result cap — split by experience/job/workplace type, or by city/country
- 🔁 Only new jobs — incremental mode for scheduled daily runs
- 🛡️ Reliable — proxy rotation, adaptive throttling, auto-retry, resume on interruption
- 📄 No login required — reads only public, logged-out data
💡 Use cases
- Job boards & aggregators — a fresh feed of postings for a niche or region
- Recruiting & sourcing — see who's hiring for a role, company, or location
- Market & salary research — analyze demand, pay, and hiring trends
- Lead generation — companies actively hiring = a buying signal
🚀 How to use
- Enter keywords and a location — or paste one or more LinkedIn job-search URLs into
searchUrls. - (Optional) turn on company details, add filters, or split the search to collect more than 1,000 results.
- Click Start. Results stream to the dataset, ready to export as JSON, CSV, Excel, or via the API.
Input parameters
Search
| Field | Type | Description |
|---|---|---|
searchUrls | array | Paste LinkedIn job-search URLs (from linkedin.com/jobs/search). Overrides the fields below and keeps every filter in the URL. Multiple allowed. |
keywords | string | Search terms — job title, skill, or company. Required unless searchUrls is set. |
location | string | City, region, or country. Empty = worldwide. |
datePosted | enum | any, past24Hours, pastWeek, pastMonth. |
jobTypes | array | fullTime, partTime, contract, temporary, internship, volunteer. |
workplaceTypes | array | onSite, remote, hybrid. |
experienceLevels | array | internship, entryLevel, associate, midSenior, director, executive. |
sortBy | enum | recent or relevance ordering. |
companyIds | array | Restrict to specific companies by their LinkedIn company ID (the number in a company page URL). |
geoId | string | Exact LinkedIn geo ID (advanced) — overrides location. |
How much to collect
| Field | Type | Description |
|---|---|---|
maxResults | integer | Stop after this many jobs (default 100). |
scrapeDetails | boolean | Fetch each job's detail page for the full description and metadata (default true). |
scrapeCompany | boolean | Also fetch each company's page for size, industry, website, HQ, etc. (default false). |
splitBy | array | Split the query by experienceLevel / jobType / workplaceType to exceed the ~1,000-result cap (see below). |
splitByCountry | string | Split across a country's major cities (e.g. United States). |
splitLocations | array | Split across your own list of locations (overrides splitByCountry). |
Filter the results
| Field | Type | Description |
|---|---|---|
titleIncludeKeywords | array | Keep only jobs whose title contains any of these. |
titleExcludeKeywords | array | Drop jobs whose title contains any of these (e.g. senior, manager). |
excludeCompanies | array | Drop jobs from these companies. |
minSalary | integer | Drop jobs whose salary max is below this (jobs with no salary shown are kept). |
onlyWithSalary | boolean | Keep only jobs that show a salary. |
Incremental & advanced
| Field | Type | Description |
|---|---|---|
onlyNewJobs | boolean | Skip jobs seen in previous runs of this Actor (tracked automatically) — ideal for schedules. |
skipJobIds | array | Job IDs to exclude (pass a previous run's IDs to get only new postings). |
requestDelaySecs | integer | Delay between requests (default 1). Raise if you hit rate limits. |
detailConcurrency | integer | Parallel detail-page fetches (default 3). |
proxyConfiguration | object | Residential proxy by default (most reliable — LinkedIn heavily blocks datacenter IPs); switch to Datacenter to save cost on small runs. |
Example input
{"keywords": "data engineer","location": "Berlin, Germany","datePosted": "pastWeek","jobTypes": ["fullTime"],"workplaceTypes": ["remote", "hybrid"],"maxResults": 200,"scrapeCompany": true}
Output
One item per job:
{"jobId": "3801234567","title": "Senior Data Engineer","companyName": "Acme Corp","companyUrl": "https://www.linkedin.com/company/acme","location": "Berlin, Germany","postedAt": "2026-06-25","jobAgeDays": 6,"jobUrl": "https://www.linkedin.com/jobs/view/3801234567","description": "We are looking for...","descriptionHtml": "<p>We are looking for…</p>","seniorityLevel": "Mid-Senior level","employmentType": "Full-time","jobFunction": "Engineering and Information Technology","industries": "Software Development","applicants": 47,"salary": "€70,000 - €90,000","salaryMin": 70000,"salaryMax": 90000,"salaryCurrency": "EUR","salaryPeriod": "yearly","applyType": "offsite","easyApply": false,"isActive": true,"companyLogo": "https://media.licdn.com/...","scrapedAt": "2026-07-01T12:00:00+00:00","companySize": "501-1,000 employees","companyIndustry": "Software Development","companyWebsite": "https://acme.com","companyHeadquarters": "Berlin, Germany","companyFounded": "2014","companyEmployeesOnLinkedIn": 3506,"companyFollowers": 561227}
The company* fields appear only when scrapeCompany is on. Fields LinkedIn
doesn't show (e.g. salary) come back as null. See What guest mode can't
see below for the few fields that require a login.
Collecting more than 1,000 results
LinkedIn caps every search at 1,000 results. To collect more, the Actor runs narrower sub-queries — each with its own 1,000 ceiling — and merges and de-duplicates them:
- By filter dimension —
splitBy: ["experienceLevel", "jobType"]runs 6 × 6 = 36 sub-queries (~36,000 jobs). - By location —
splitByCountry: "United States"runs the search across major US cities; or pass your ownsplitLocations. This stacks withsplitBy.
Each job is tagged with the sub-query (searchVariant) it came from.
Export & integrations
- Download results as JSON, CSV, Excel, HTML, or RSS.
- Send to Google Sheets, Slack, Google Drive, GitHub, Zapier, Make, or a webhook via the Integrations tab — no code.
- Schedule it (e.g. daily) and pair with
onlyNewJobsto get only fresh postings each run. - API — trigger runs and fetch results from any language via the Apify API or Python/JS clients (see the API tab).
Every record carries scrapedAt and jobAgeDays so you can track freshness.
What guest mode can't see
The Actor reads only public, logged-out data, so a few things LinkedIn hides behind login are not available (and we don't fabricate them):
- External apply URL — LinkedIn shows guests a sign-up wall instead of the real link. We report
applyType(offsite/easyApply), butapplyUrlis usuallynull. - Exact applicant count — guest pages cap it ("Over 200 applicants"), so
applicantsis a floor. - Recruiter / job-poster details and required-skill lists — login-only.
- Exact workplace type per job — only set when your query makes it unambiguous.
Unlocking these would require an authenticated session, which violates LinkedIn's Terms of Service — so this Actor deliberately stays login-free.
FAQ
Do I need a LinkedIn account or cookies? No. It reads only public data — nothing to log in with, and no account-ban risk.
Which proxy should I use? Residential (the default) is the most reliable — LinkedIn heavily rate-limits datacenter IPs. Switch to Datacenter to save cost on small, low-volume runs.
How many jobs can I get from one search?
LinkedIn caps each query at ~1,000. Use splitBy and splitByCountry / splitLocations to collect far more.
Can I get the external apply link or recruiter details? No — LinkedIn hides those behind login (see What guest mode can't see).
How do I get only new jobs each day?
Turn on onlyNewJobs and schedule the Actor — it skips jobs seen in previous runs.
What can I export? JSON, CSV, Excel, HTML, or RSS — via the Console or API.
Is this legal? It scrapes only public data, but scraping LinkedIn is against their Terms of Service. Use it responsibly, keep volume reasonable, and check the laws that apply to you.