Free LinkedIn Job Details Scraper — Job URL to JSON, No Login
Pricing
Pay per usage
Free LinkedIn Job Details Scraper — Job URL to JSON, No Login
Free. Give LinkedIn job URLs or IDs (called once per job from n8n, Make, scripts or AI agents) and get each posting as JSON: title, company, location, full description, closed or not, local-language need, optional company details. Applicant counts: paste the same URLs into our Applicants Actor.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Northbell
Maintained by CommunityActor stats
0
Bookmarked
43
Total users
31
Monthly active users
12 hours ago
Last modified
Categories
Share
LinkedIn Job Details from URL — Free, No Login
One LinkedIn job URL in, one JSON row back in a few seconds (3 s in our test on 17 Oct 2026) — built to be called once per job from n8n, Make, Zapier, a script or an AI agent (API call below). Each row has the title, company, location, seniority, employment type, industries, the full description and whether the posting has closed; turn on includeCompany for the employer's industry, HQ, website, size and employees on LinkedIn. No login, no cookies.
Free Actor — you pay only Apify's platform usage, about $0.11 per 1,000 jobs. Need the applicant count for the same URLs? Send them unchanged to LinkedIn Jobs Scraper with Applicant Counts.
**Every row now carries `companyUrl`.** Paste those into the [LinkedIn Company Scraper](https://apify.com/northbell/linkedin-company-growth-scraper) for each employer's real headcount, growth, industry and website, or into the [LinkedIn Jobs by Company Scraper](https://apify.com/northbell/linkedin-company-jobs-scraper) for every role that company has open.Call it once per job
curl -X POST "https://api.apify.com/v2/acts/northbell~linkedin-job-detail-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"jobs": ["https://www.linkedin.com/jobs/view/4419969671"]}'
The response is the row itself (a JSON array with one job). In n8n, Make or Zapier, run this Actor from the Apify app with the same input and read its dataset items.
What it does
Give it any of these:
https://www.linkedin.com/jobs/view/4419969671https://www.linkedin.com/jobs/view/senior-engineer-at-acme-4419969671https://www.linkedin.com/jobs/search/?currentJobId=44199696714419969671
and each becomes:
| field | example |
|---|---|
title | Senior Software Engineer |
company | General Motors |
location | Austin, TX |
seniority | Mid-Senior level |
employmentType | Full-time |
industries | Motor Vehicle Manufacturing |
jobFunction | always null — LinkedIn no longer shows "Job function" on public job pages (checked 7 Oct 2026); kept so existing integrations keep working |
description | the full posting text |
salaryMentioned | whether the posting states pay — LinkedIn's own pay box or an amount in the description, in any currency. For the numbers (min, max, currency, yearly), paste the same job URLs into LinkedIn Jobs Salary Data (input jobs) |
closed | the posting is no longer accepting applications |
localLanguage, localLanguageNeed, localLanguageLevel | the local language of the job's country (from location: Germany, Japan, France, Spain, Poland, Latin America and more; null elsewhere), whether the text asks for it — required, preferred, one-of, not-required, or unknown when it says nothing — and the level it names (fluent, B2, N2 …) |
languagesRequired | every language the text names: { language, level, need, matched, evidence }, with the sentence it was read from |
companyDetails | only when Include company details (includeCompany: true) is on: the employer's public LinkedIn company page — name, industry, headquarters, founded, website, companyType, sizeBand, employeesOnLinkedIn, followers, specialties, tagline. Each company is read once per run. If its page cannot be read, { url, error } instead |
Changed 2026-10-16: the four language columns were added at the end of each row, and the optional companyDetails after them; existing columns and their order are unchanged, and companyDetails is absent unless you turn it on.
Company details are one reading. For headcount growth over time — how many people each employer added since your last run, per month — paste the same company URLs into LinkedIn Company Scraper — Employee Count & Headcount Growth.
A job that has been removed comes back as closed: true — that is data, not an error.
No login. Not as a policy — as a property of the code.
This Actor reads LinkedIn's public guest endpoints, the same pages an anonymous visitor sees. The request headers are a frozen object with no Cookie and no Authorization; a guard rejects any credential header, and the input schema refuses any field that looks like cookie, token or password. Unit tests assert it.
Need more than one job at a time?
This free Actor reads jobs you already have URLs for. When you need more, the paid siblings do the heavy lifting:
- Search LinkedIn jobs in bulk (keyword + location, $0.50/1,000): Fast LinkedIn Jobs Scraper
- Search with filters that actually work (experience, title include/exclude, proof in every run): LinkedIn Jobs Scraper — Filters That Actually Work
- Salary as numbers, filter by pay (
$150K–$220K→annualSalaryMin/Max): LinkedIn Jobs Salary Data - Applicant counts and how fast they grow — paste the same job URLs: LinkedIn Jobs Scraper with Applicant Counts takes the URLs you send here (input
jobs) and adds the applicant count, and on later calls how many applied since the last one - Every open role at one company, with measured coverage: LinkedIn Company Jobs Scraper
Beyond LinkedIn — same idea, other job sources, each marking which jobs are new since your last run:
- Company career pages (exact new/closed, $0.50/1,000): Greenhouse · Lever · Ashby · Workday · 38 AI companies in one run
- Job sites by country (full descriptions, paste a search URL): SEEK, JobStreet & JobsDB (AU/NZ/MY/SG/PH/ID/HK/TH) · Reed (UK) · InfoJobs (ES) · XING (DACH) · Dice (US tech) · HelloWork (FR) · Computrabajo (LatAm) · Foundit (IN)
Input
{"jobs": ["https://www.linkedin.com/jobs/view/4419969671","4430230327"],"includeCompany": true}
includeCompany is optional (off by default): it adds companyDetails and one extra page read per distinct company.
skipClosed is optional (off by default): postings that no longer accept applications, or that LinkedIn has removed, get no row. They are still counted in OUTPUT (closed).
Up to 200 jobs per run.
On data and privacy
This Actor collects job postings, not people. It does not read, store or return applicant identities, profiles, names or contact details.
Running locally
**Something broke or looks wrong?** Open an issue on this Actor's Issues tab and I'll look at it. **Found it useful?** A short review on the Store page helps other people find it. Our own running cost is about **$0.111 per 1,000 rows** of Apify platform usage at 512 MB (22-run measurement, Sept 2026 — [how it was measured](https://dev.to/apify/i-measured-what-my-11-actors-cost-to-run-the-96x-spread-was-mostly-one-config-field-hoj)). That platform usage is all you pay; the Actor itself is free.npm installnpm test
For AI agents
This Actor works well as an agent tool: the input schema is small and fully described, every run returns structured rows, and failures come back as data rather than silent gaps. Use it when you need to:
- get structured details of a LinkedIn job posting from its URL, for free
- check whether a LinkedIn job posting is still open or has closed
- check whether a job needs the local language ("does this Tokyo job need Japanese?"), with the sentence that says so
- get the hiring company's details (industry, HQ, website, size, employees on LinkedIn) together with the job (
includeCompany: true)