LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $0.75 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Search public LinkedIn job postings by keywords and location with date, job-type, remote and experience filters. Each job is one row: title, company, location, posting date, full description, seniority, employment type, job function, industries and applicants. No LinkedIn account needed.

Pricing

from $0.75 / 1,000 results

Rating

0.0

(0)

Developer

Philip Kirkbride

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Search public LinkedIn job postings and get every job as one clean row: title, company and company page, location, posting date, the full job description, seniority level, employment type, industries and the applicant count. Search by keywords and location, narrow it with the same filters LinkedIn offers (date posted, job type, on-site/remote/hybrid, experience level), or paste LinkedIn jobs search links you already use. No LinkedIn account, login or cookies are needed.

Use it to track hiring at target companies, build job boards and alerts, research salaries and skills demand, or feed recruiting and sales pipelines with fresh openings.

Quick Start

{
"keywords": "python developer",
"location": "United States",
"datePosted": "pastWeek",
"workplaceTypes": ["remote"],
"maxItems": 100
}

This returns up to 100 remote Python developer jobs posted in the past week in the United States, each with its full description and job details.

Input

InputTypeDefaultMeaning
keywordsstring—Job title, skill or company, e.g. python developer.
locationstring—Country, region or city as you would type it on LinkedIn, e.g. Germany or London, England, United Kingdom.
geoIdstring—Optional LinkedIn numeric location id (the geoId in a LinkedIn jobs search link) for a precise search area.
datePostedstringanyany, past24h, pastWeek or pastMonth.
jobTypesarray[]Any of fullTime, partTime, contract, temporary, internship, volunteer, other.
workplaceTypesarray[]Any of onSite, remote, hybrid.
experienceLevelsarray[]Any of internship, entryLevel, associate, midSenior, director, executive.
sortBystringrelevancerelevance or recent (newest first).
searchUrlsarray[]LinkedIn jobs search links (https://www.linkedin.com/jobs/search/?keywords=...). Their keywords, location and filters are used as-is.
maxItemsinteger50Total cap on job rows across all searches, after removing duplicates (up to 5,000).
includeDetailsbooleantrueOpen every job for the full description, seniority, employment type, industries and applicant count. Turn off for faster runs with search-result fields only.

You need at least keywords, a location or one search link.

What it returns

One row per job:

FieldMeaning
jobId, urlLinkedIn job id and the job's page link.
titleJob title.
companyName, companyUrl, companyLogoThe hiring company, its LinkedIn page and logo.
locationJob location as LinkedIn shows it.
postedAt, postedAgoPosting date (YYYY-MM-DD) and the relative time, e.g. 2 weeks ago.
salarySalary range when LinkedIn shows one on the job card; otherwise null (many employers put pay only in the description).
benefitsCard badge such as Actively Hiring or Be an early applicant.
descriptionText, descriptionHtmlThe full job description as readable text and as HTML.
seniorityLevel, employmentType, industriesLinkedIn's job criteria, when the employer filled them in.
jobFunctionJob function, when LinkedIn shows it on the public job page; LinkedIn currently leaves it out, so expect null.
applicantsText, applicantsCountThe applicant caption (e.g. Over 200 applicants) and its number.
applyType, applyUrloffsite (apply on the company site) or easyApply (apply on LinkedIn), and the external apply link when the job page includes it.
isClosedtrue when the job no longer accepts applications.
searchKeywords, searchLocation, searchPositionWhich search found the job and its rank in the results.
scrapedAtCollection time (UTC, ISO 8601).

With includeDetails off, the description, criteria, applicant and apply fields are null.

The run summary (OUTPUT in the key-value store) reports jobs (rows delivered), errors, and per-search counts at searches.

Output example

{
"jobId": "4431992044",
"url": "https://www.linkedin.com/jobs/view/4431992044",
"title": "Python Developer",
"companyName": "CACI International Inc",
"companyUrl": "https://www.linkedin.com/company/caci-international-inc",
"companyLogo": "https://media.licdn.com/dms/image/v2/D4E0BAQFob5rET4oo0w/company-logo_100_100/B4EZpUDHB_GYAQ-/0/1762346693140/caci_international_inc_logo",
"location": "Chantilly, VA",
"postedAt": "2026-07-08",
"postedAgo": "3 months ago",
"salary": null,
"benefits": "Actively Hiring",
"descriptionText": "Job Title: Python Developer\n\nJob Category: Information Technology\n\nTime Type: Full time\n\n...",
"descriptionHtml": "Job Title: Python Developer<br><br>Job Category: Information Technology<br><br>...",
"seniorityLevel": "Not Applicable",
"employmentType": "Full-time",
"jobFunction": null,
"industries": "Defense and Space Manufacturing",
"applicantsText": "72 applicants",
"applicantsCount": 72,
"applyType": "offsite",
"applyUrl": null,
"isClosed": false,
"searchKeywords": "python developer",
"searchLocation": "United States",
"searchPosition": 1,
"scrapedAt": "2026-10-19T22:00:00+00:00"
}

Failed jobs

If a job's page cannot be read after several retries, that job is listed in the run summary at OUTPUT.jobErrors with its jobId, url and an error code and message. Failed jobs are never dataset rows and are not charged. A search that stops early is listed at OUTPUT.searchErrors; the jobs it already returned are kept. A run that collects no jobs at all ends with an error instead of finishing green with an empty dataset.

Limits and caveats

  • LinkedIn shows at most about 1,000 jobs per search. For more, split the search by location, date posted or job type.
  • When few jobs match, LinkedIn widens the search with related postings, as it does on its own website. Check title and location if you need strict matches.
  • Fields such as salary or applyUrl are null when LinkedIn does not show them for that job. Most jobs that use an external application do not show the external link to signed-out visitors, so applyUrl is usually null; applyType still tells you how to apply.
  • Only public job postings are collected; no member profiles or personal data.
  • Automated access is subject to LinkedIn's terms; use this actor only where you have the necessary permissions and a lawful basis.

FAQ

Do I need a LinkedIn account? No. The actor reads the same public job pages anyone can open without signing in.

Can I run several searches at once? Yes. Fill in the search fields and add more LinkedIn jobs search links in searchUrls. A job found by more than one search is returned once, and maxItems caps the total.

How do I get only the newest jobs? Set datePosted to past24h and sortBy to recent, and schedule the actor to run daily.

Why is salary empty when the description mentions pay? salary holds the structured range LinkedIn shows on the job card. Pay written inside the description stays in descriptionText.

Price

$0.00075 per job delivered, plus $0.005 per run start. The run-start event is charged per GB of memory; the default 512 MB run is one start event. The start is charged even if the run saves no results. Failed jobs are not charged. Platform usage is included in these prices.