LinkedIn Jobs Scraper - Job Listings, Salaries & Companies avatar

LinkedIn Jobs Scraper - Job Listings, Salaries & Companies

Pricing

from $0.28 / 1,000 jobs

Go to Apify Store
LinkedIn Jobs Scraper - Job Listings, Salaries & Companies

LinkedIn Jobs Scraper - Job Listings, Salaries & Companies

LinkedIn jobs scraper for job listings and job postings: full job descriptions, salaries, seniority, applicants and company details. Search by keyword and location, with date, company, job type and remote filters, any number of jobs. Export or use the API. No login or cookies. $0.35 per 1,000 jobs.

Pricing

from $0.28 / 1,000 jobs

Rating

0.0

(0)

Developer

Social Scrapers

Social Scrapers

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

12 hours ago

Last modified

Features

Limited permissions

Share

LinkedIn Jobs Scraper extracts LinkedIn job listings, also called job postings: titles, full job descriptions, salaries, seniority levels, employment types, industries, applicant counts and job posters, plus the hiring company's website, size and headquarters. Search by keyword and location, or paste LinkedIn search and job links. It works without a LinkedIn account, login or cookies, and costs $0.35 per 1,000 jobs.

What does LinkedIn Jobs Scraper do?

LinkedIn Jobs Scraper turns LinkedIn's public job search into clean, structured data you can download or read through an API:

  • 🔎 Search by keywords and location: run many job searches in one go, each with its own filters and job limit. Location can be a city, a state or region, a country, or worldwide.
  • 🎛️ Filters: date posted (past hour, 24 hours, week, month, or any window you set), company (by name or LinkedIn company ID), job type, experience level, workplace (remote, hybrid, on-site), Easy Apply only and fewer than 10 applicants.
  • 🔗 Paste links: LinkedIn job search URLs copied from your browser (every filter in them is kept) or links to single jobs.
  • ♾️ No 1,000-job ceiling: LinkedIn shows about 1,000 results for one search. Ask for more, or for every job (maxJobs: 0), and the scraper splits the search by state or region, by city and by date posted on its own, then saves each job once.
  • 📄 Full job details: description as HTML and plain text, seniority level, employment type, industries, applicants, salary with minimum, maximum, currency and period, apply type, whether the job still accepts applications, and the job poster when LinkedIn shows one.
  • 🏢 Company details (optional): website, industry, company size, employees on LinkedIn, headquarters and full address, company type, year founded, specialties, followers and About text.
  • 🎯 Only jobs that mention your keywords (optional): LinkedIn fills a search that has few matches with related jobs. Keep only jobs whose title, or title or description, names every word of your keywords; the others are never charged.
  • 🧹 No duplicates: a job found by several searches is saved once, and you pay for it once.
  • 💸 Pay per job: you pay only for jobs saved to your dataset. Set a maximum cost per run and it stops exactly there.

What data can you extract from LinkedIn job postings?

DataFields
Jobid, link, title, location, postedAt (YYYY-MM-DD), postedAtRelative ("3 days ago"), isClosed
DescriptiondescriptionHtml, descriptionText
Job criteriaseniorityLevel, employmentType, industries, jobFunction
SalarysalaryInfo (as shown), salaryMin, salaryMax, salaryCurrency, salaryPeriod (HOUR, DAY, WEEK, MONTH or YEAR), additionalCompensation
ApplicantsapplicantsCount, applicantsText, benefits ("Actively Hiring", "Be an early applicant")
How to applyapplyType (EASY_APPLY or EXTERNAL), applyUrl
Hiring companycompanyName, companyId, companyLinkedinUrl, companyLogo
Company details (option)companyWebsite, companyIndustry, companySize, companyEmployeesOnLinkedin, companyHeadquarters, companyAddress, companyType, companyFounded, companySpecialties, companyFollowers, companyDescription, companySlogan
Job posterjobPosterName, jobPosterTitle, jobPosterProfileUrl, jobPosterPhoto
SourcesearchKeywords, searchLocation, inputUrl, scrapedAt

Every job has the same 48 fields in the same order. Fields LinkedIn does not show for a job are null (or an empty list), so the data drops straight into spreadsheets, databases and AI pipelines.

How to scrape LinkedIn jobs

  1. Open LinkedIn Jobs Scraper in Apify Console and click Try for free.
  2. Add one or more searches (keywords, location, filters), or paste LinkedIn search URLs or job URLs.
  3. Set Max jobs per search: a number, or 0 for every job the search has.
  4. Optional: turn on Include company details.
  5. Click Start. Download the LinkedIn jobs as JSON, CSV, Excel, XML or HTML, or read them through the API.
  6. To collect new jobs every day, save the input as a task and schedule it with datePosted: "past24Hours".

How much does it cost to scrape LinkedIn jobs?

$0.35 per 1,000 jobs saved to your dataset. Apify subscribers pay less: Silver 10% off ($0.315 per 1,000), Gold 20% off ($0.28 per 1,000). Platform usage and proxies are included, and so are company details.

  • Duplicates, jobs that no longer exist and jobs that don't match your job type or experience level filters are free.
  • Example: 10,000 data analyst jobs in the United States, with descriptions: $3.50 ($2.80 on Gold).
  • Example: 500 new jobs every day for a month, about 15,000 jobs: $5.25.
  • Apify's free plan includes monthly platform credit (currently $5), enough to try the scraper on about 14,000 jobs.

Set a maximum cost per run when you start it, and the scraper stops cleanly before the first job that would go over it.

Input example

{
"searches": [
{
"keywords": "data analyst",
"location": "United States",
"datePosted": "pastWeek",
"experienceLevels": ["entryLevel", "associate"],
"maxJobs": 2000
},
{
"keywords": "registered nurse",
"location": "Texas, United States",
"jobTypes": ["fullTime"],
"maxJobs": 0
},
{
"keywords": "product manager",
"companies": ["Stripe"],
"workplaceTypes": ["remote"]
}
],
"searchUrls": ["https://www.linkedin.com/jobs/search?keywords=accountant&location=London&f_TPR=r86400"],
"jobUrls": ["https://www.linkedin.com/jobs/view/4484651478"],
"includeDescription": true,
"includeCompanyDetails": true
}
FieldWhat it does
searchesA list of searches. Each one can have keywords, location, datePosted (anyTime, pastMonth, pastWeek, past24Hours, pastHour, or a window in seconds such as r7200), companies (names or LinkedIn company IDs), jobTypes (fullTime, partTime, contract, temporary, internship, volunteer, other), experienceLevels (internship, entryLevel, associate, midSenior, director, executive), workplaceTypes (onSite, remote, hybrid), easyApply, under10Applicants and maxJobs.
searchUrlsLinkedIn job search links copied from your browser.
jobUrlsLinks to single LinkedIn jobs, or job IDs.
maxJobsPerSearchJobs to save per search URL, and per search without its own maxJobs (default 100, 0 for every job).
includeDescriptionOpen each job for its description and details (default on). Turn off for a faster list with the search-result fields only.
includeCompanyDetailsAdd each hiring company's website, size, industry, headquarters and more (default off). Each company page is read once per run.
keywordMatchoff (default, LinkedIn's results as they are), title (every word of the keywords in the job title) or titleOrDescription. Jobs left out are not charged.
filtersAsKeywordsAdd the job type, experience level and workplace you pick to the search words (default on, see Limits).
proxyConfigurationKeep the default: Apify Proxy, with refused pages retried through residential IPs automatically.

Output example

A real job from a search for software engineers in London, trimmed:

{
"id": "4484651478",
"link": "https://www.linkedin.com/jobs/view/4484651478",
"title": "Backend GOLANG Software Engineers 100% remote in the UK",
"companyName": "Huxley",
"companyId": "7355",
"companyLinkedinUrl": "https://uk.linkedin.com/company/huxley",
"location": "City Of London, England, United Kingdom",
"postedAt": "2026-11-03",
"postedAtRelative": "5 days ago",
"applicantsCount": 76,
"applicantsText": "76 applicants",
"salaryInfo": ["£69,000.00/yr", "£125,000.00/yr"],
"salaryMin": 69000,
"salaryMax": 125000,
"salaryCurrency": "GBP",
"salaryPeriod": "YEAR",
"benefits": ["Actively Hiring"],
"seniorityLevel": "Not Applicable",
"employmentType": "Full-time",
"jobFunction": null,
"industries": "Technology, Information and Internet",
"descriptionText": "Backend GOLANG Software Engineers 100% remote in the UK\n\nThis is a new and exclusive opportunity for a Backend GO Software Engineer ...",
"applyType": "EXTERNAL",
"applyUrl": null,
"isClosed": false,
"companyWebsite": "http://www.huxley.com",
"companyIndustry": "Staffing and Recruiting",
"companySize": "201-500 employees",
"companyEmployeesOnLinkedin": 773,
"companyHeadquarters": "London, England",
"companyAddress": { "street": "55 Basinghall Street", "city": "London", "region": "England", "postalCode": "EC2V 5DX", "country": "GB" },
"companyType": "Public Company",
"companyFounded": 1995,
"companySpecialties": ["Banking", "Engineering", "IT", "Financial Services"],
"companyFollowers": 641278,
"companySlogan": "Outpace tomorrow, together.",
"searchKeywords": "software engineer",
"searchLocation": "London",
"inputUrl": "https://www.linkedin.com/jobs/search?keywords=software+engineer&location=London&f_TPR=r604800",
"scrapedAt": "2026-11-08T11:12:45.436Z"
}

In Apify Console the results also open as tables: Overview (the main fields), Details (descriptions, salary, poster) and Companies (company details).

Use cases

  • 📋 Job boards and job alerts: feed fresh LinkedIn job postings into your job board, newsletter, Slack channel or spreadsheet every day.
  • 🎯 Lead generation: find companies hiring for roles your product or service supports, with their website, size, industry and headquarters.
  • 💰 Salary research: compare posted salary ranges by role, seniority, location and company.
  • 📈 Hiring signals and market research: follow which companies are hiring, for what, where and how fast, and track demand for skills over time.
  • 🧑‍💼 Recruiting: track open roles at competitors and see who posts them.

Use it via API, Python, JavaScript and integrations

Run LinkedIn Jobs Scraper from your own code with the Apify API and read the jobs from the run's dataset.

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("socialscrapers/linkedin-jobs-scraper").call(run_input={
"searches": [{"keywords": "data analyst", "location": "United States", "datePosted": "past24Hours", "maxJobs": 500}],
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], "|", job["companyName"], "|", job["location"], "|", job["salaryInfo"])

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('socialscrapers/linkedin-jobs-scraper').call({
searches: [{ keywords: 'nurse', location: 'Texas, United States', maxJobs: 0 }],
includeCompanyDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`${items.length} jobs`);
  • No-code: connect the scraper to Make, Zapier, n8n, Google Sheets, Slack, Airbyte and more through Apify integrations.
  • Webhooks and schedules: run it every hour or day, and get notified or push the results when a run finishes.
  • AI agents: let AI assistants and agents run it and read the jobs through the Apify MCP server.

Limits

  • Public data only. The scraper reads what LinkedIn shows to visitors who are not signed in.
  • External apply links are shown by LinkedIn to signed-in members only, so applyUrl is empty for EXTERNAL jobs; applyType still tells you which kind of job it is.
  • Job function is not shown on public job pages at the moment, so jobFunction is usually empty.
  • Remote, hybrid or on-site is not stated on public job pages. LinkedIn's public search reads job type, experience level and workplace as words of the search, so the scraper adds them to your keywords and checks each job's employment type and seniority level on its page; workplace results follow LinkedIn's reading of the search.
  • Related jobs: LinkedIn fills a search with few matching jobs with related ones, as on its website. Use keywordMatch to keep only jobs that mention your keywords.
  • Salaries, applicants and job posters appear only when LinkedIn shows them for the job.
  • About 1,000 results per LinkedIn search. Bigger searches are split automatically by location (states and regions of 12 countries, main cities of the busiest regions, countries for worldwide searches) and by date posted. Very broad searches can still leave out some older, lower-ranked jobs that LinkedIn never lists.
  • postedAt is the exact day for jobs found by a search, and an estimate from "2 weeks ago" for jobs added by URL.
  • Share and short links work. lnkd.in/… links are followed to the job or job search they open, job links with tracking parameters (?trackingId=…, ?refId=…, currentJobId=…) are read as their job, and a job link given as a search URL (or a search link given as a job URL) is read as what it is. An unusable link is skipped with a warning; following a link is never charged.
  • A run with 0 results still succeeds when your input was fine. When a job is no longer available, a company is not found, a short link is dead or a search matches nothing, the run ends as Succeeded with a status message naming each input and why, and nothing is charged. A run fails only when no input is usable at all, or when LinkedIn refuses every one of 3 or more inputs.

FAQ

LinkedIn Jobs Scraper collects only job listings that LinkedIn shows publicly to any visitor, without logging in. Scraping public data is generally lawful, but rules differ by country and by use, and job posters' names are personal data under laws like the GDPR. You are responsible for how you use the data; ask a lawyer if you are unsure.

Do I need a LinkedIn account or cookies?

No. LinkedIn Jobs Scraper never logs in and needs no cookies, so no LinkedIn account is put at risk.

How many LinkedIn jobs can I scrape?

As many as LinkedIn lists for your searches. Set maxJobs to any number, or 0 for all of them; searches over LinkedIn's limit of about 1,000 results are split automatically.

Why did I get fewer jobs than I asked for?

The search had fewer results, some jobs were already found by another search in the run, some did not match your job type or experience level, or the run reached its maximum cost. The run log says which, for each search.

Why do some jobs not match my keywords?

LinkedIn shows related jobs after the matching ones when a search has few matches (a made-up word still lists thousands of jobs). Set keywordMatch to title or titleOrDescription to keep only jobs that mention every word of your keywords; the rest are skipped for free.

How do I get only new jobs every day?

Set datePosted to past24Hours (or pastHour for hourly runs) and schedule the scraper. Each run returns the jobs posted since the last one.

How do I filter by company?

Put the company name in companies and the scraper finds its LinkedIn company ID, as LinkedIn's company filter does. You can also give the ID itself: it's in every job's companyId field.

Can I limit how much a run costs?

Yes. Set the maximum cost per run when you start it: the scraper saves jobs until the next one would go over that amount, then stops.

Other scrapers by Social Scrapers

ScraperWhat it gets
Facebook Groups ScraperPosts from public Facebook groups
Facebook Profile ScraperPublic details of Facebook profiles and Pages
Facebook Profile Posts ScraperRecent posts of Facebook profiles and Pages
Facebook Ads Library ScraperAds from Meta's public Ad Library
X (Twitter) Profile ScraperX profiles: bio, followers, counts
Quora ScraperQuora questions, answers and profiles
Reddit ScraperReddit posts, comments, users and search
Instagram Profile ScraperInstagram profiles and their posts
Instagram Post ScraperInstagram posts, reels and comments
YouTube ScraperYouTube videos, channels, search and comments
YouTube Transcript ScraperTranscripts and captions of YouTube videos
Threads ScraperThreads profiles, posts and replies