LinkedIn Jobs Scraper - Job Listings, Salaries & Companies
Pricing
from $0.28 / 1,000 jobs
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
12 hours ago
Last modified
Categories
Features
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?
| Data | Fields |
|---|---|
| Job | id, link, title, location, postedAt (YYYY-MM-DD), postedAtRelative ("3 days ago"), isClosed |
| Description | descriptionHtml, descriptionText |
| Job criteria | seniorityLevel, employmentType, industries, jobFunction |
| Salary | salaryInfo (as shown), salaryMin, salaryMax, salaryCurrency, salaryPeriod (HOUR, DAY, WEEK, MONTH or YEAR), additionalCompensation |
| Applicants | applicantsCount, applicantsText, benefits ("Actively Hiring", "Be an early applicant") |
| How to apply | applyType (EASY_APPLY or EXTERNAL), applyUrl |
| Hiring company | companyName, companyId, companyLinkedinUrl, companyLogo |
| Company details (option) | companyWebsite, companyIndustry, companySize, companyEmployeesOnLinkedin, companyHeadquarters, companyAddress, companyType, companyFounded, companySpecialties, companyFollowers, companyDescription, companySlogan |
| Job poster | jobPosterName, jobPosterTitle, jobPosterProfileUrl, jobPosterPhoto |
| Source | searchKeywords, 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
- Open LinkedIn Jobs Scraper in Apify Console and click Try for free.
- Add one or more searches (keywords, location, filters), or paste LinkedIn search URLs or job URLs.
- Set Max jobs per search: a number, or
0for every job the search has. - Optional: turn on Include company details.
- Click Start. Download the LinkedIn jobs as JSON, CSV, Excel, XML or HTML, or read them through the API.
- 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}
| Field | What it does |
|---|---|
searches | A 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. |
searchUrls | LinkedIn job search links copied from your browser. |
jobUrls | Links to single LinkedIn jobs, or job IDs. |
maxJobsPerSearch | Jobs to save per search URL, and per search without its own maxJobs (default 100, 0 for every job). |
includeDescription | Open each job for its description and details (default on). Turn off for a faster list with the search-result fields only. |
includeCompanyDetails | Add each hiring company's website, size, industry, headquarters and more (default off). Each company page is read once per run. |
keywordMatch | off (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. |
filtersAsKeywords | Add the job type, experience level and workplace you pick to the search words (default on, see Limits). |
proxyConfiguration | Keep 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 ApifyClientclient = 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
applyUrlis empty forEXTERNALjobs;applyTypestill tells you which kind of job it is. - Job function is not shown on public job pages at the moment, so
jobFunctionis 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
keywordMatchto 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.
postedAtis 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
Is it legal to scrape LinkedIn jobs?
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
| Scraper | What it gets |
|---|---|
| Facebook Groups Scraper | Posts from public Facebook groups |
| Facebook Profile Scraper | Public details of Facebook profiles and Pages |
| Facebook Profile Posts Scraper | Recent posts of Facebook profiles and Pages |
| Facebook Ads Library Scraper | Ads from Meta's public Ad Library |
| X (Twitter) Profile Scraper | X profiles: bio, followers, counts |
| Quora Scraper | Quora questions, answers and profiles |
| Reddit Scraper | Reddit posts, comments, users and search |
| Instagram Profile Scraper | Instagram profiles and their posts |
| Instagram Post Scraper | Instagram posts, reels and comments |
| YouTube Scraper | YouTube videos, channels, search and comments |
| YouTube Transcript Scraper | Transcripts and captions of YouTube videos |
| Threads Scraper | Threads profiles, posts and replies |