LinkedIn Job Details Scraper avatar

LinkedIn Job Details Scraper

Pricing

from $4.00 / 1,000 jobs

Go to Apify Store
LinkedIn Job Details Scraper

LinkedIn Job Details Scraper

The LinkedIn Job Details Scraper extracts job data from LinkedIn job detail URLs, capturing job titles, company names, logos, locations, posting times, descriptions, number of applicants, job criteria, similar jobs, and related job listings—ideal for recruitment insights and job market analysis.

Pricing

from $4.00 / 1,000 jobs

Rating

0.0

(0)

Developer

FalconScrape

FalconScrape

Maintained by Community

Actor stats

16

Bookmarked

841

Total users

115

Monthly active users

5 days ago

Last modified

Share

🚀 LinkedIn Job Scraper: Job Descriptions, Salaries and Applicants

Turn LinkedIn job posting URLs into clean JSON, CSV or Excel rows. The LinkedIn Job Details Scraper returns the full job description, the posted salary range as numbers, seniority level, employment type, applicant count, apply route and company keys for every job you give it. Use it as a LinkedIn job scraper or a simple LinkedIn jobs API for job posting data, with no login, cookies or LinkedIn account.

🎯 Use Cases for LinkedIn Job Posting Data

  • LinkedIn jobs API without approval: send job URLs from your own app, ATS or spreadsheet and get structured job details back through the Apify API.
  • Collect LinkedIn job descriptions: build a job description dataset for skills extraction, resume matching or training and evaluating AI models.
  • LinkedIn salary data: pull posted salary ranges as salaryMin, salaryMax, currency and period for pay benchmarking and compensation research.
  • Recruiting and lead generation: see which companies are hiring for a role, how many people applied, and whether they hire through Easy Apply or their own careers site.
  • Job market data and research: compare seniority, employment type and industries across a set of postings you track.
  • Enrich job search results: feed the job URLs you collect with a LinkedIn job search scraper into this Actor to add the full description and salary.

✨ Features

  • Full job description: the complete description text, ready for search, NLP or an LLM.
  • Posted salary parsed: salaryMin, salaryMax, salaryCurrency and salaryPeriod as clean values, plus the original salaryText, so you don't have to regex a string yourself.
  • Flat filter fields: seniorityLevel, employmentType, jobFunction and industries are top-level fields, not buried in a name/value array. The original criteria list is kept too, for backwards compatibility.
  • Applicant count as a number: sort and filter on applicantCount directly; the caption LinkedIn shows is kept in numApplicantsCaption.
  • Apply route: applyType tells you whether the job uses LinkedIn Easy Apply (easyApply) or an external careers site or ATS (offsite).
  • Company join key: companySlug plus a companyUrl normalised to www.linkedin.com, stable across runs and across LinkedIn's country subdomains.
  • Discovery data: similarJobs and peopleAlsoViewed come with every posting, so one job leads you to related openings.
  • Three dataset views: Overview (the key fields and salary), Descriptions (title, company, salary and full text) and All fields.
  • Fair billing: removed, expired or login-walled postings are skipped and never saved as blank paid rows, and the run stops at the max charge you set.

🛠️ How It Works

  1. Paste LinkedIn job URLs into Search URLs, one per line. Job pages (https://www.linkedin.com/jobs/view/<job ID>, with or without the title in the link) and search URLs with a currentJobId parameter both work.
  2. Run the scraper: each job ID is read from the URL, and each posting comes back as one structured record.
  3. Download the results as JSON, CSV or Excel, or pull them through the Apify API.

⚙️ Input: LinkedIn Job URLs

FieldWhat it does
Search URLsLinkedIn job URLs to scrape, one per line. Required.

Accepted URL formats:

  • Job page: https://www.linkedin.com/jobs/view/4454862094. Country subdomains (uk.linkedin.com, pl.linkedin.com…) and tracking parameters are fine; the URL is normalised to the job ID.
  • Search URL with an open job: https://www.linkedin.com/jobs/search/?currentJobId=4454862094&keywords=data%20engineer. Only the job in currentJobId is scraped, not the whole search result list.

Share links with the job title before the ID (/jobs/view/senior-data-engineer-at-company-4454862094) work too, so you can paste similarJobs links from a previous run straight back in. To scrape every job in a search, use the LinkedIn Jobs Search Scraper and pass its job URLs here.

{
"searchUrls": [
"https://www.linkedin.com/jobs/view/4454862094",
"https://www.linkedin.com/jobs/search/?currentJobId=4471101120&keywords=data%20engineer"
]
}

💰 Pricing

Pay only for the jobs you get. No monthly rental.

Current price per job, by Apify plan:

PlanPrice per jobPer 1,000 jobs
Free, Starter$0.004$4.00
Scale$0.0036$3.60
Business$0.003$3.00

From October 22, 2026 the price is flat on every plan:

EventPriceWhat you get
Job$0.004 per job ($4.00 per 1,000)One job posting with all fields below
Actor start$0.00005 per runCharged once when the run starts.

Examples on the flat price: 10 jobs = $0.04 · 250 jobs = $1.00 · 1,000 jobs = $4.00 (plus $0.00005 per run).

You only pay for jobs saved to the dataset. Postings that no longer exist are not charged.

📊 Sample Output Data

Real output from a live run (the description and the two lists are shortened here):

{
"jobId": "4454862094",
"jobUrl": "https://www.linkedin.com/jobs/view/4454862094",
"jobTitle": "Senior Data Engineer, DX",
"companyName": "Atlassian",
"companyUrl": "https://www.linkedin.com/company/atlassian",
"companySlug": "atlassian",
"companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQGeyLL6crkJKg/company-logo_100_100/company-logo_100_100/0/1735593604612/atlassian_logo?e=2147483647&v=beta&t=4riZdTtd16Oeoew0_mSThLQak3uyYv2-ep73cztBjbo",
"jobLocation": "Salt Lake City, UT",
"postedTimeAgo": "2 days ago",
"numApplicantsCaption": "Over 200 applicants",
"applicantCount": 200,
"applyType": "offsite",
"seniorityLevel": "Mid-Senior level",
"employmentType": "Full-time",
"jobFunction": null,
"industries": "Software Development",
"salaryText": "$160,000.00 - $230,000.00",
"salaryMin": 160000,
"salaryMax": 230000,
"salaryCurrency": "$",
"salaryPeriod": "year",
"description": "OverviewWorking at AtlassianAtlassians can choose where they work – whether in an office, from home, or a combination of the two. That way, Atlassians have more control over supporting their family, personal goals, and other priorities. We can hire people in a …",
"criteria": [
{ "name": "Seniority level", "value": "Mid-Senior level" },
{ "name": "Employment type", "value": "Full-time" },
{ "name": "Industries", "value": "Software Development" }
],
"similarJobs": [
{
"jobLink": "https://www.linkedin.com/jobs/view/senior-data-engineer-us-at-firstup-4471920639?refId=I1OfnGdaVq%2F2l2S7C%2BQ4gQ%3D%3D&trackingId=RO9rO6rGgl8S9zujkK5AqQ%3D%3D",
"jobName": "Senior Data Engineer (US)",
"companyLogo": "https://media.licdn.com/dms/image/v2/C4D0BAQFTTlQcI_PvnA/company-logo_100_100/company-logo_100_100/0/1631505486397/firstup_io_logo?e=2147483647&v=beta&t=ir6vYST_04_HviWbwYr93HPGpHiYG0T0GttEIozPw28",
"companyName": "Firstup",
"jobLocation": "United States",
"postedTimeAgo": "2 weeks ago"
}
],
"peopleAlsoViewed": [
{
"jobLink": "https://www.linkedin.com/jobs/view/senior-data-engineer-at-teli-labs-4480274461?refId=I1OfnGdaVq%2F2l2S7C%2BQ4gQ%3D%3D&trackingId=6dBhERjjAhhtjAKZFR2Akw%3D%3D",
"jobTitle": "Senior Data Engineer",
"companyName": "Teli Labs",
"jobLocation": "United States",
"postedTimeAgo": null
}
],
"scrapedAt": "2026-10-20T10:10:14.417Z"
}

applicantCount is the number in LinkedIn's caption, so "Over 200 applicants" becomes 200 (a lower bound). salaryPeriod is taken from the salary text, or inferred from the size of the number only where that is unambiguous, and left null otherwise rather than guessed. In this run similarJobs held 113 postings and peopleAlsoViewed 10.

All 26 fields

FieldDescription
jobIdLinkedIn job posting ID
jobUrlCanonical LinkedIn job URL
jobTitleJob title
companyNameHiring company name
companyUrlCompany LinkedIn URL, normalised to www
companySlugCompany slug, a stable join key across runs
companyLogoCompany logo image URL
jobLocationJob location
postedTimeAgoHow long ago the job was posted, as displayed
numApplicantsCaptionApplicant caption as displayed
applicantCountApplicant count as a number
applyTypeeasyApply for LinkedIn Easy Apply, offsite for an external careers site or ATS
seniorityLevelSeniority level
employmentTypeFull-time, Part-time, Contract…
jobFunctionJob function, when LinkedIn shows one
industriesIndustries
salaryTextPosted salary range as displayed
salaryMinLower bound of the posted salary range
salaryMaxUpper bound of the posted salary range
salaryCurrencyCurrency symbol or code of the posted salary
salaryPeriodyear, hour or month
descriptionFull job description text
criteriaOriginal name/value criteria list
similarJobsSimilar jobs LinkedIn shows next to the posting
peopleAlsoViewedJobs that viewers of this posting also viewed
scrapedAtISO 8601 time the row was scraped

🔁 Schedule and Integrate

LinkedIn postings change and close quickly, so for salary or job market tracking run it once a day on the job URLs you follow: each run is a dated snapshot of applicant counts and posting status. Set it up in Apify Schedules, and pair it with a daily LinkedIn Jobs Search Scraper run to pick up new job URLs. Send the results to Google Sheets, Zapier, Make, n8n or a webhook with Apify integrations, so new job posting data lands where your team already works.

🤖 Use as a LinkedIn Jobs API with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (https://mcp.apify.com), so an agent can read a LinkedIn job description and salary on request. An agent can call it with:

{ "searchUrls": ["https://www.linkedin.com/jobs/view/4454862094"] }

❓ FAQ

Does LinkedIn have an official jobs API? LinkedIn's Job Posting API is a partner program: approved applicant tracking systems and job boards use it to post and manage their own jobs on LinkedIn, and access requires partner approval. It isn't a way to read other companies' postings. This Actor needs no API key, partner approval or LinkedIn account, and returns the public job details anyone can see on a LinkedIn job page, with the salary and filter fields already parsed.

Do I need a LinkedIn account or cookies? No. The Actor reads only public job pages, with no login, cookies or account of yours.

How do I get LinkedIn salary data? Run the Actor on the jobs you care about and read salaryMin, salaryMax, salaryCurrency and salaryPeriod. LinkedIn only shows a salary when the employer posts one, which is common in places with pay transparency rules (many US states, for example) and rarer elsewhere.

Why is a salary, job function or apply type empty? The field is null when LinkedIn doesn't show it on the posting: no salary range was posted, the job has no job function in its criteria, or the posting is old or closed. Missing values are left empty, not filled in with guesses.

Can I scrape LinkedIn job descriptions from a whole search? This Actor scrapes the job URLs you give it; a search URL yields only the job in currentJobId. To cover a whole search, collect job URLs with the LinkedIn Jobs Search Scraper or all open roles at a company with the LinkedIn Company Jobs Scraper, then pass them here.

What happens with expired job URLs? A removed or expired posting has no job data, so it is skipped and not charged. If none of the URLs in a run return a job, the run fails with a message instead of reporting success with an empty dataset.