LinkedIn Job Description Scraper ⚡ Advanced Data, Best Value avatar

LinkedIn Job Description Scraper ⚡ Advanced Data, Best Value

Pricing

Pay per usage

Go to Apify Store
LinkedIn Job Description Scraper ⚡ Advanced Data, Best Value

LinkedIn Job Description Scraper ⚡ Advanced Data, Best Value

Paste LinkedIn job URLs, get the full job description, criteria, applicant count and company info for each one. No login, no browser, one request per job.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Muhammad Shamshad Aslam

Muhammad Shamshad Aslam

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

LinkedIn Job Description Scraper by URL

Paste LinkedIn job links, get the full job description and every detail LinkedIn shows on the public job page — title, company, location, seniority, employment type, function, industries, applicant count, salary when published, recruiter contact when shown, and the employer's company profile. No login, no browser, one request per job, so it is fast and very low cost per result.

Built as the companion to the LinkedIn Jobs Scraper: that one finds jobs from a search, this one takes job URLs you already have — from a spreadsheet, a CRM, an alert email, a Clay table, or another scraper — and fills in everything behind the link.

Features

  • 🔗 Any LinkedIn job link format — linkedin.com/jobs/view/4419969671, the long slugged version, regional hosts (uk.linkedin.com, de.linkedin.com), search and collection links with currentJobId=…, or just the numeric ID
  • 📄 Full description — plain text (descriptionText) and the original HTML (descriptionHtml) with headings, lists and bold intact
  • ✅ Job criteria — seniority level, employment type, job function, industries
  • 💰 Salary — read from the job page, where LinkedIn actually publishes it
  • 👤 Job poster — recruiter name, title and profile URL when the listing shows one
  • 🏢 Company profile — website, domain, industry, employee count, headquarters, type, founding year, specialties, description. One cached request per company, so ten jobs at one employer cost one fetch. Switch off for the cheapest run
  • ✂️ Long-description splitting — optional descriptionChunks array of up to 3 labelled parts ("Job description part 1 of 2: …") plus flat descriptionPart1–descriptionPart3 fields, so descriptions over 8,000 characters fit Clay, Google Sheets and other per-cell limits
  • 🚦 Closed-job flag — isClosed is true when LinkedIn shows "No longer accepting applications"
  • ✅ Standard field names — id, link, companyName, salaryInfo, postedAt, descriptionText, industries, applicantsCount, companyEmployeesCount, applyMethod, identical to the LinkedIn Jobs Scraper so rows from both merge in one sheet
  • ✅ Duplicate-free — the same job pasted twice is fetched once
  • 🧾 Failure report — URLs that were removed, blocked or malformed are listed in the key-value store record FAILED_URLS, never silently dropped
  • ✅ No login required — reads the public job page, so no account can get banned

Input

FieldTypeDefaultDescription
jobUrlsarray3 example jobsLinkedIn job URLs or IDs, one per line. Duplicates are fetched once
fetchCompanyDetailsbooleantrueAlso fetch the employer's public LinkedIn page. Off = one request per job, fastest and cheapest
chunkDescriptionbooleanfalseSplit the description into up to 3 labelled parts. Adds descriptionChunks, descriptionPartsCount and descriptionPart1–3. descriptionText stays in full
chunkSizeinteger7000Max characters per part, label included. Only used when splitting is on
proxyConfigproxyResidentialResidential is the default; datacenter IPs get blocked quickly

Example input

{
"jobUrls": [
"https://www.linkedin.com/jobs/view/svp-chief-medical-officer-at-main-line-health-4447207474",
"https://www.linkedin.com/jobs/view/4419969671",
"https://www.linkedin.com/jobs/search/?currentJobId=4455931376&keywords=engineer"
],
"fetchCompanyDetails": true,
"chunkDescription": true
}

Output

One record per unique job. Fields that LinkedIn does not show for a given job are null.

{
"id": "4419969671",
"title": "Senior Software Engineer – Go (Golang)",
"companyName": "General Motors",
"companyLinkedinUrl": "https://www.linkedin.com/company/general-motors",
"companyLogo": "https://media.licdn.com/dms/image/v2/.../company-logo_100_100",
"location": "Warren, MI",
"postedRelative": "1 week ago",
"postedAt": "2026-09-17",
"salaryInfo": "$120,000.00/yr - $180,000.00/yr",
"link": "https://www.linkedin.com/jobs/view/4419969671",
"applyUrl": "https://www.linkedin.com/jobs/view/4419969671/",
"applyMethod": "external",
"isClosed": false,
"jobPosterName": "Jane Doe",
"jobPosterTitle": "Technical Recruiter at General Motors",
"jobPosterProfileUrl": "https://www.linkedin.com/in/jane-doe",
"descriptionText": "Job Description\n\nWe are looking for a Senior Software Engineer …",
"descriptionHtml": "<p><strong>Job Description</strong></p><p>We are looking for …</p>",
"descriptionChunks": [
"Job description part 1 of 2:\nJob Description\n\nWe are looking for a Senior Software Engineer …",
"Job description part 2 of 2:\nBenefits\n\nGM offers a competitive …"
],
"descriptionPartsCount": 2,
"descriptionPart1": "Job description part 1 of 2:\nJob Description\n\nWe are looking for a Senior Software Engineer …",
"descriptionPart2": "Job description part 2 of 2:\nBenefits\n\nGM offers a competitive …",
"descriptionPart3": null,
"seniorityLevel": "Mid-Senior level",
"employmentType": "Full-time",
"jobFunction": "Engineering and Information Technology",
"industries": "Motor Vehicle Manufacturing",
"applicantsCount": "153 applicants",
"companyWebsite": "https://www.gm.com/",
"companyDomain": "gm.com",
"companyIndustry": "Motor Vehicle Manufacturing",
"companyEmployeesCount": "10,001+ employees",
"companyHeadquarters": "Detroit, Michigan",
"companyType": "Public Company",
"companyFounded": "1908",
"companySpecialties": "Automotive, Electric Vehicles, and Autonomous Driving",
"companyDescription": "General Motors is a global company …",
"inputUrl": "https://www.linkedin.com/jobs/view/4419969671"
}

Field notes

  • postedAt is derived from LinkedIn's relative wording (1 week ago), so it is approximate. postedRelative is exactly what LinkedIn shows.
  • descriptionChunks, descriptionPartsCount and descriptionPart1–descriptionPart3 only appear when chunkDescription is on. Parts are cut at paragraph or sentence boundaries, never mid-word. A description short enough for one part gives a single "part 1 of 1". Unused parts are null. In Clay, map descriptionPart1, descriptionPart2, descriptionPart3 to three columns.
  • applyMethod is easy_apply or external. LinkedIn hides the external ATS link from logged-out visitors, so applyUrl opens the job's apply flow on LinkedIn.
  • Company fields are null when fetchCompanyDetails is off, when the employer has no LinkedIn page, or when the page is a university (/school/), which LinkedIn does not serve publicly.

What counts as a result

Only jobs that were actually fetched are saved to the dataset and charged. Removed jobs (LinkedIn answers 404), blocked requests and inputs with no job ID cost nothing; they are listed in the key-value store record FAILED_URLS under notFound, blocked, failed and invalid, and summarised at the end of the log.

Use cases

  • Enrich a job list — you have links from alerts, a CRM or a search scraper; add the description, seniority and company data behind each one
  • Lead generation — read the description to qualify the hiring need, then pair with a contact finder for the job poster or company
  • Applicant tooling — pull the full text of postings for résumé matching, keyword analysis or cover-letter generation
  • Monitoring — re-run on saved links to see which roles have closed (isClosed) and how applicant counts move
  • Clay, n8n, Make, Zapier — pass a column of job URLs in, get structured fields back

Tips

  • Copy links from a logged-out LinkedIn tab or from any LinkedIn job scraper output; both work. Logged-in links also work, since only the numeric ID is used.
  • Turn fetchCompanyDetails off when you only need the description; that halves the requests.
  • Seeing "Cell data size exceeds limit" in Clay? Turn chunkDescription on and use the descriptionPart fields instead of descriptionText.
  • Export as CSV, Excel or JSON from the dataset tab, or pull via the Apify API.