LinkedIn Jobs Scraper - Search, Filter & Detail Extraction
Pricing
from $0.09 / 1,000 jobs
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
Maintained by CommunityActor stats
1
Bookmarked
734
Total users
193
Monthly active users
2 hours ago
Last modified
Categories
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 goal | Use | Required input |
|---|---|---|
| Find roles by words and filters | Keyword search | keywords |
| Reuse a LinkedIn search URL with any filter | URL search | searchUrl |
| Browse the open roles from one company | Company search | companyId |
| Retrieve jobs that you already know | Direct lookup | jobIds |
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.
Add details and related jobs
{"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.
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string | Search terms. | |
searchUrl | string | A 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. | |
companyId | string | Return jobs from one company. Takes precedence over keywords. | |
jobIds | string[] | Fetch known jobs. Takes precedence over the search modes. | |
location | string | Location used with keyword search. | |
maxJobs | integer | 25 | Maximum search results. Set to 0 for all available results, up to 1,000. |
sortBy | string | relevant | relevant or recent. |
jobType | string[] | full_time, part_time, contract, temporary, volunteer, internship, or other. | |
experienceLevel | string[] | internship, entry_level, associate, mid_senior, director, or executive. | |
workType | string[] | on_site, remote, or hybrid. | |
datePosted | string | past_24h, past_week, or past_month. | |
datePostedSeconds | integer | Custom posted-within window in seconds, such as 3600 for the last hour. Overrides datePosted. Maximum 2592000 (30 days). Ignored when searchUrl is used. | |
salary | string | Minimum 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. | |
easyApplyOnly | boolean | false | Return only Easy Apply jobs. |
fetchDetails | boolean | false | Add descriptions, complete published criteria, compensation context, benefits, application details, recruiter information, and related searches. |
includeSimilar | boolean | false | Add related jobs to each result. |
maxSimilarJobs | integer | 25 | Maximum related jobs per result. Set to 0 for all available related jobs, up to 1,000. |
proxyConfiguration | object | {"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
| Group | Fields |
|---|---|
| Identity | jobId, jobSlug, title, company, companyId, companySlug |
| Links and media | jobUrl, companyUrl, companyLogoUrl |
| Search metadata | location, position, postedDate, postedTimeAgo, isNew, salary, badge, hiringSignal, benefitsSummary, benefitsCount |
| Job details | description, descriptionHtml, criteria, experienceLevel, employmentType, jobFunction, industries, applicants, applicantsCategory, applicantsStatus |
| Compensation and benefits | compensationSalary, compensationHeading, compensationProvider, compensationType, compensationDescription, featuredBenefits, featuredBenefitsSource |
| Application | applicationMethod, hasDirectApply, closedNotice |
| Related data | similarJobs, peopleAlsoViewed, similarSearches, relatedSearches |
| Other details | searchGeoId, geoId, industryIds, titleId, ogTitle, referralMultiplier, recruiter, scrapedAt |
Output field types
| JSON type | Root fields |
|---|---|
| string | jobId, title, company, location, jobUrl, applicationMethod, scrapedAt |
string or null | jobSlug, 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 null | position |
| boolean | isNew, hasDirectApply |
object or null | criteria, recruiter |
string[] or null | featuredBenefits |
Similar job[] or null | similarJobs, peopleAlsoViewed |
Similar search[] or null | similarSearches |
Related search[] or null | relatedSearches |
| Object | Field types |
|---|---|
criteria | object whose keys and values are strings |
recruiter | name: string; title, profileUrl, photoUrl: string or null |
| Similar job | jobId, title, company, location, jobUrl: string; companyUrl, companyLogoUrl, salary, postedDate, postedTimeAgo: string or null; isNew: boolean |
| Similar search | title, url: string; openJobsCount: string or null |
| Related search | title, 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
| Field | Meaning |
|---|---|
position | Position on the returned search page. It is not a global rank and can repeat across pages. |
badge | The 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. |
criteria | Every published job-criteria label and value. The four convenience fields can be null when a listing uses different labels. |
applicants | Published display text. applicantsCategory is over_200, first_25, or null; exact numeric counts remain in applicants. |
salary | Pay 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. |
applicationMethod | Whether the visible apply action is LinkedIn-hosted (linkedin), leads to an employer site (external), or cannot be determined (unknown). Search-only results use unknown. |
closedNotice | An explicit closure message when one is published. A null value does not prove that applications are open. |
searchGeoId | Search-page context returned with the detail page. It is not the job's location ID. |
referralMultiplier | A published referral callout such as 2x; it is display text, not an independently calculated probability. |
similarJobs | Related listings requested with includeSimilar. The current job and duplicate IDs are removed. peopleAlsoViewed, similarSearches, and relatedSearches are separate recommendations returned with job details. |
Selected related-job fields
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:
| Parent | Child fields |
|---|---|
recruiter | name, 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 field | Preferred field |
|---|---|
benefitsCount | benefitsSummary |
applicantsStatus | applicantsCategory |
compensationProvider | compensationHeading |
hasDirectApply | applicationMethod === "linkedin" |
geoId | searchGeoId |
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.