LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

$0.50 / 1,000 job results

Go to Apify Store
LinkedIn Jobs Scraper

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

Dataji

Maintained by Community

Actor stats

0

Bookmarked

16

Total users

5

Monthly active users

a day ago

Last modified

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

  1. Enter keywords and a location — or paste one or more LinkedIn job-search URLs into searchUrls.
  2. (Optional) turn on company details, add filters, or split the search to collect more than 1,000 results.
  3. Click Start. Results stream to the dataset, ready to export as JSON, CSV, Excel, or via the API.

Input parameters

FieldTypeDescription
searchUrlsarrayPaste LinkedIn job-search URLs (from linkedin.com/jobs/search). Overrides the fields below and keeps every filter in the URL. Multiple allowed.
keywordsstringSearch terms — job title, skill, or company. Required unless searchUrls is set.
locationstringCity, region, or country. Empty = worldwide.
datePostedenumany, past24Hours, pastWeek, pastMonth.
jobTypesarrayfullTime, partTime, contract, temporary, internship, volunteer.
workplaceTypesarrayonSite, remote, hybrid.
experienceLevelsarrayinternship, entryLevel, associate, midSenior, director, executive.
sortByenumrecent or relevance ordering.
companyIdsarrayRestrict to specific companies by their LinkedIn company ID (the number in a company page URL).
geoIdstringExact LinkedIn geo ID (advanced) — overrides location.

How much to collect

FieldTypeDescription
maxResultsintegerStop after this many jobs (default 100).
scrapeDetailsbooleanFetch each job's detail page for the full description and metadata (default true).
scrapeCompanybooleanAlso fetch each company's page for size, industry, website, HQ, etc. (default false).
splitByarraySplit the query by experienceLevel / jobType / workplaceType to exceed the ~1,000-result cap (see below).
splitByCountrystringSplit across a country's major cities (e.g. United States).
splitLocationsarraySplit across your own list of locations (overrides splitByCountry).

Filter the results

FieldTypeDescription
titleIncludeKeywordsarrayKeep only jobs whose title contains any of these.
titleExcludeKeywordsarrayDrop jobs whose title contains any of these (e.g. senior, manager).
excludeCompaniesarrayDrop jobs from these companies.
minSalaryintegerDrop jobs whose salary max is below this (jobs with no salary shown are kept).
onlyWithSalarybooleanKeep only jobs that show a salary.

Incremental & advanced

FieldTypeDescription
onlyNewJobsbooleanSkip jobs seen in previous runs of this Actor (tracked automatically) — ideal for schedules.
skipJobIdsarrayJob IDs to exclude (pass a previous run's IDs to get only new postings).
requestDelaySecsintegerDelay between requests (default 1). Raise if you hit rate limits.
detailConcurrencyintegerParallel detail-page fetches (default 3).
proxyConfigurationobjectResidential 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 dimensionsplitBy: ["experienceLevel", "jobType"] runs 6 × 6 = 36 sub-queries (~36,000 jobs).
  • By locationsplitByCountry: "United States" runs the search across major US cities; or pass your own splitLocations. This stacks with splitBy.

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 onlyNewJobs to 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), but applyUrl is usually null.
  • Exact applicant count — guest pages cap it ("Over 200 applicants"), so applicants is 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.