LinkedIn Jobs Scraper - Search, Filter & Detail Extraction avatar

LinkedIn Jobs Scraper - Search, Filter & Detail Extraction

Pricing

from $0.09 / 1,000 jobs

Go to Apify Store
LinkedIn Jobs Scraper - Search, Filter & Detail Extraction

LinkedIn Jobs Scraper - Search, Filter & Detail Extraction

πŸ”₯ ~$0.05/1K jobs πŸ”₯ Scrape LinkedIn job listings via the public guest API. Search with filters (job type, experience, remote, salary), fetch full descriptions and criteria. No login required.

Pricing

from $0.09 / 1,000 jobs

Rating

0.0

(0)

Developer

Kai

Kai

Maintained by Community

Actor stats

1

Bookmarked

734

Total users

193

Monthly active users

2 hours ago

Last modified

Share

LinkedIn Jobs Scraper

Collect LinkedIn job listings as structured data. Search by role and location, browse jobs from one company, or retrieve jobs that you already know by ID. Add full job details and related roles when you need them.

Job and company data

  • Job identity, title, company, location, listing URL, publication time, and search position.
  • Description, published criteria, experience and employment type, applicants, and closure notices.
  • Salary text, compensation context, benefits, application method, and recruiter details.
  • Similar jobs, jobs that people also viewed, and related searches.

Choose a collection method

Your goalUseRequired input
Find roles by words and filtersKeyword searchkeywords
Reuse a LinkedIn search URL with any filterURL searchsearchUrl
Browse the open roles from one companyCompany searchcompanyId
Retrieve jobs that you already knowDirect lookupjobIds

You can add full job details to keyword, URL, and company searches with fetchDetails. You can add related roles to all methods with includeSimilar. If an input contains more than one method, the Actor uses jobIds first, then searchUrl, then companyId, and then keywords.

Collect jobs

In Apify Console, select Input, paste one of the following examples, and select Run. Open the default Dataset when the run finishes. It contains one item per job.

Search by keyword

{
"keywords": "software engineer",
"location": "Stockholm",
"maxJobs": 25
}

Search with filters

{
"keywords": "data scientist",
"location": "United States",
"maxJobs": 100,
"jobType": ["full_time"],
"experienceLevel": ["mid_senior", "director"],
"workType": ["remote"],
"datePosted": "past_week",
"sortBy": "recent"
}

Search with a LinkedIn URL

Open a job search on LinkedIn, set any filters, and copy the browser URL. Paste it into searchUrl. The Actor reuses the URL's filters. This unlocks filters that have no dedicated field, such as a custom posted window.

{
"searchUrl": "https://www.linkedin.com/jobs/search?keywords=software%20engineer&location=United%20States&f_TPR=r3600",
"maxJobs": 25
}

f_TPR=r3600 limits results to the last hour (3600 seconds). Change the number for any window. maxJobs, fetchDetails, includeSimilar, maxSimilarJobs, and proxy settings still apply. The other filter fields are ignored in this mode. For a custom window without a URL, use datePostedSeconds.

Browse jobs from one company

{
"companyId": "1441",
"maxJobs": 50
}

Enriched output includes companyId, so you can reuse it in a later run.

Fetch known job IDs

{
"jobIds": ["4318512219", "4405220132"]
}

Job ID mode includes job details. You can reuse jobId values from an earlier run. The Actor removes blank entries. Each requested nonblank entry produces one result in the same order, so repeated job IDs remain repeated. includeSimilar and maxSimilarJobs still apply. Direct lookup ignores keywords, companyId, location, maxJobs, jobType, experienceLevel, workType, datePosted, salary, sortBy, easyApplyOnly, and fetchDetails.

{
"keywords": "software engineer",
"location": "Stockholm",
"maxJobs": 10,
"fetchDetails": true,
"includeSimilar": true,
"maxSimilarJobs": 5
}

Input

Use one collection mode per run. For compatibility with older combined inputs, the Actor uses jobIds first, then searchUrl, then companyId, and then keywords.

FieldTypeDefaultDescription
keywordsstringSearch terms.
searchUrlstringA LinkedIn jobs search URL. The Actor reuses its filters, including ones with no dedicated field such as a custom posted window. Takes precedence over companyId and keywords.
companyIdstringReturn jobs from one company. Takes precedence over keywords.
jobIdsstring[]Fetch known jobs. Takes precedence over the search modes.
locationstringLocation used with keyword search.
maxJobsinteger25Maximum search results. Set to 0 for all available results, up to 1,000.
sortBystringrelevantrelevant or recent.
jobTypestring[]full_time, part_time, contract, temporary, volunteer, internship, or other.
experienceLevelstring[]internship, entry_level, associate, mid_senior, director, or executive.
workTypestring[]on_site, remote, or hybrid.
datePostedstringpast_24h, past_week, or past_month.
datePostedSecondsintegerCustom posted-within window in seconds, such as 3600 for the last hour. Overrides datePosted. Maximum 2592000 (30 days). Ignored when searchUrl is used.
salarystringMinimum salary: 40000, 60000, 80000, 100000, 120000, 140000, 160000, 180000, or 200000. LinkedIn can filter using unpublished salary estimates, so returned jobs do not always expose salary fields.
easyApplyOnlybooleanfalseReturn only Easy Apply jobs.
fetchDetailsbooleanfalseAdd descriptions, complete published criteria, compensation context, benefits, application details, recruiter information, and related searches.
includeSimilarbooleanfalseAdd related jobs to each result.
maxSimilarJobsinteger25Maximum related jobs per result. Set to 0 for all available related jobs, up to 1,000.
proxyConfigurationobject{"useApifyProxy":true}Connection settings for the run.

The Actor removes blank entries from jobIds. If no nonblank ID remains, it checks searchUrl, then companyId, and then keywords. If no collection mode has a nonblank value, the run finishes successfully with an empty Dataset. Nonblank strings are sent without trimming. Unknown input fields are retained for backward compatibility and ignored by the Actor. Known fields still enforce their documented types, enums, and numeric bounds.

Complete input examples

Output

Each item in the default Dataset represents one job. Search fields are always present. Detail fields are null when you do not request enrichment or when the listing does not publish a value. Search-only results use unknown for applicationMethod and false for hasDirectApply.

This input produced the recorded values below on 29 July 2026:

{
"keywords": "software engineer",
"maxJobs": 1,
"salary": "40000",
"datePosted": "past_24h",
"sortBy": "recent",
"easyApplyOnly": true,
"fetchDetails": true
}

The selected fields below are unchanged. Long text, media, related data, selected IDs, and compatibility aliases are not shown. This is not a saved Dataset item.

{
"jobId": "4438949044",
"jobSlug": "full-stack-engineer-at-green-key-resources-4438949044",
"title": "Full Stack Engineer",
"company": "Green Key Resources",
"companySlug": "green-key-resources",
"companyUrl": "https://www.linkedin.com/company/green-key-resources",
"location": "Tysons Corner, VA",
"jobUrl": "https://www.linkedin.com/jobs/view/full-stack-engineer-at-green-key-resources-4438949044",
"position": 1,
"postedDate": "2026-07-28",
"postedTimeAgo": "14 hours ago",
"isNew": true,
"salary": null,
"badge": "Actively Hiring +6 benefits",
"hiringSignal": "actively_hiring",
"benefitsSummary": "Actively Hiring +6 benefits",
"criteria": {
"Seniority level": "Mid-Senior level",
"Employment type": "Full-time",
"Job function": "Information Technology",
"Industries": "Software Development"
},
"experienceLevel": "Mid-Senior level",
"employmentType": "Full-time",
"jobFunction": "Information Technology",
"industries": "Software Development",
"applicants": "Over 200 applicants",
"applicantsCategory": "over_200",
"compensationSalary": "$100,000.00/yr - $170,000.00/yr",
"compensationHeading": "Green Key Resources provided pay range",
"compensationType": "Base pay range",
"compensationDescription": "This range is provided by Green Key Resources. Your actual pay will be based on your skills and experience β€” talk with your recruiter to learn more.",
"featuredBenefits": [
"Medical insurance",
"Vision insurance",
"Dental insurance",
"401(k)",
"Paid paternity leave",
"Commuter benefits"
],
"featuredBenefitsSource": "Inferred from the description for this job",
"applicationMethod": "linkedin",
"hasDirectApply": true,
"closedNotice": null,
"companyId": "90639",
"similarJobs": null,
"scrapedAt": "2026-07-29T13:25:04.277Z"
}

Output fields

GroupFields
IdentityjobId, jobSlug, title, company, companyId, companySlug
Links and mediajobUrl, companyUrl, companyLogoUrl
Search metadatalocation, position, postedDate, postedTimeAgo, isNew, salary, badge, hiringSignal, benefitsSummary, benefitsCount
Job detailsdescription, descriptionHtml, criteria, experienceLevel, employmentType, jobFunction, industries, applicants, applicantsCategory, applicantsStatus
Compensation and benefitscompensationSalary, compensationHeading, compensationProvider, compensationType, compensationDescription, featuredBenefits, featuredBenefitsSource
ApplicationapplicationMethod, hasDirectApply, closedNotice
Related datasimilarJobs, peopleAlsoViewed, similarSearches, relatedSearches
Other detailssearchGeoId, geoId, industryIds, titleId, ogTitle, referralMultiplier, recruiter, scrapedAt

Output field types

JSON typeRoot fields
stringjobId, title, company, location, jobUrl, applicationMethod, scrapedAt
string or nulljobSlug, companySlug, companyUrl, companyLogoUrl, postedDate, postedTimeAgo, salary, badge, hiringSignal, benefitsSummary, benefitsCount, description, descriptionHtml, experienceLevel, employmentType, jobFunction, industries, applicants, applicantsCategory, applicantsStatus, compensationSalary, compensationHeading, compensationProvider, compensationType, compensationDescription, featuredBenefitsSource, closedNotice, searchGeoId, geoId, companyId, industryIds, titleId, ogTitle, referralMultiplier
number or nullposition
booleanisNew, hasDirectApply
object or nullcriteria, recruiter
string[] or nullfeaturedBenefits
Similar job[] or nullsimilarJobs, peopleAlsoViewed
Similar search[] or nullsimilarSearches
Related search[] or nullrelatedSearches
ObjectField types
criteriaobject whose keys and values are strings
recruitername: string; title, profileUrl, photoUrl: string or null
Similar jobjobId, title, company, location, jobUrl: string; companyUrl, companyLogoUrl, salary, postedDate, postedTimeAgo: string or null; isNew: boolean
Similar searchtitle, url: string; openJobsCount: string or null
Related searchtitle, url: string

applicationMethod is linkedin, external, or unknown. hiringSignal is actively_hiring, early_applicant, or null. applicantsCategory is over_200, first_25, or null.

descriptionHtml contains source-provided markup. Sanitise it before you render it in a browser or another HTML-capable client.

How to read key fields

FieldMeaning
positionPosition on the returned search page. It is not a global rank and can repeat across pages.
badgeThe complete display label shown with a search card. hiringSignal is actively_hiring, early_applicant, or null for recognised badge labels; benefitsSummary preserves the full label for recognised benefit labels.
criteriaEvery published job-criteria label and value. The four convenience fields can be null when a listing uses different labels.
applicantsPublished display text. applicantsCategory is over_200, first_25, or null; exact numeric counts remain in applicants.
salaryPay text shown in a search result. Detailed pay information, when published, is returned in the compensation* fields.
compensation*Published display text and context, not a currency-normalised salary model.
applicationMethodWhether the visible apply action is LinkedIn-hosted (linkedin), leads to an employer site (external), or cannot be determined (unknown). Search-only results use unknown.
closedNoticeAn explicit closure message when one is published. A null value does not prove that applications are open.
searchGeoIdSearch-page context returned with the detail page. It is not the job's location ID.
referralMultiplierA published referral callout such as 2x; it is display text, not an independently calculated probability.
similarJobsRelated listings requested with includeSimilar. The current job and duplicate IDs are removed. peopleAlsoViewed, similarSearches, and relatedSearches are separate recommendations returned with job details.

A similarJobs value can contain related listings such as these. Other nested fields are not shown, so this is not a saved Dataset item.

{
"similarJobs": [
{
"jobId": "4405220132",
"title": "Software Engineer - Backend",
"company": "Helsing",
"location": "Stockholm, Stockholm County, Sweden",
"salary": null,
"jobUrl": "https://se.linkedin.com/jobs/view/software-engineer-backend-at-helsing-4405220132"
},
{
"jobId": "4392435158",
"title": "Software Engineers",
"company": "MSAB",
"location": "Stockholm, Stockholm County, Sweden",
"salary": null,
"jobUrl": "https://se.linkedin.com/jobs/view/software-engineers-at-msab-4392435158"
}
]
}

Selected enriched job fields

These nested objects use the following fields:

ParentChild fields
recruitername, title, profileUrl, photoUrl
similarJobs[], peopleAlsoViewed[]jobId, title, company, companyUrl, companyLogoUrl, location, salary, jobUrl, postedDate, postedTimeAgo, isNew
similarSearches[]title, url, openJobsCount
relatedSearches[]title, url

criteria is an open map of source labels to source values. recruiter is null when LinkedIn does not return recruiter information. The first output example shows non-null benefit and compensation fields.

Selected search-only fields

Unavailable job ID

Compatibility fields

Existing 0.x fields remain available for current integrations. Prefer the accurately named replacements in new code.

Compatibility fieldPreferred field
benefitsCountbenefitsSummary
applicantsStatusapplicantsCategory
compensationProvidercompensationHeading
hasDirectApplyapplicationMethod === "linkedin"
geoIdsearchGeoId

Collection behaviour

Search result limits

Keyword and company searches can return no items. Each search query can return at most 1,000 jobs. Use narrower queries when you need to cover more results.

If the first search page cannot be collected, the run stops. If a later page cannot be collected, the Actor saves the jobs from earlier pages and can finish successfully.

Partial enrichment

If job details are not available, the Actor keeps the search fields and sets the unavailable detail fields to null. If a related-job lookup does not return data, the Actor keeps related jobs that came with the job details. Otherwise, similarJobs is null, and the main job stays in the Dataset.

Unavailable job IDs

An unavailable job ID produces a placeholder with the requested jobId and canonical URL. This keeps direct lookup results aligned with the supplied ID list, including duplicate IDs.

LinkedIn can change listing status, classifications, criteria, and result order.