← API Catalog
Apify·Async

LinkedIn Jobs Scraper | Remove Duplicate Jobs | Pay Per Result

Knowledge & Data$0.0006 / result

What it does

LinkedIn Jobs Scraper | Remove Duplicate Jobs. The LinkedIn jobs scraper allows you to collect jobs in 2 ways: By providing one or more start URLs, or By entering multiple keywords, search queries. You can use either method individually or combine both.

Returns: LinkedIn Jobs Scraper | Remove Duplicate Jobs. The LinkedIn jobs scraper allows you to collect jobs in 2 ways: By providing one or more start URLs, or By entering multiple keywords, search queries. You can use either method individually or combine both.

Parameters

ParameterTypeRequiredDescription
jobTypeselectNoFilter by job type (Full-time, Part-time, Contract, etc.). Multiple selections allowed. When LinkedIn serves its classic search engine this filter works normally. When LinkedIn serves its AI search engine the filter is ignored, so the scraper instead embeds it into the search query itself, which the AI search understands: the search is retried once with e.g. 'Full-time ' for a single selection or '(Full-time OR Contract) ' for multiple selections.
keywordarrayNoKeyword to search for. (e.g., Software Engineer)
distanceselectNoSearch radius from the location in miles. Leave empty for default.
locationtextNoSingle location to search in. Use the Locations field instead to search multiple locations at once.
maxItemsnumberNoMaximum number of job listings to scrape. Leave empty for no limit. Note: Minimum is 150 results when using pay-per-result billing.
workTypeselectNoFilter by work location type (On-site, Remote, Hybrid). Multiple selections allowed. When LinkedIn serves its classic search engine this filter works normally. When LinkedIn serves its AI search engine the filter is ignored by LinkedIn and job pages have no field to verify it, so the scraper instead embeds the work type into the search query itself, which the AI search understands: the search is retried once with e.g. 'Remote ' for a single selection or '(Remote OR "On-Site") ' for multiple selections.
locationsarrayNoOne or more locations to search in (e.g. Montreal, Canada). Each location is combined with every keyword to generate one search per pair. When set alongside the legacy Location field, both are merged.
startUrlsarrayNoOne or more URLs of the pages where the crawler will start. Note that the Actor will additionally crawl job page data.
salaryBaseselectNoFilter by minimum salary. Only one value allowed. 🛠️ In maintenance: this filter currently only works when LinkedIn serves its classic search engine. When LinkedIn serves its new AI-powered search, it silently ignores this filter, and since salary cannot be verified reliably from job postings, the scraper has no workaround - results will include jobs below this salary. It will be restored once LinkedIn supports it again.
publishedAtselectNoHow old publications should be in Days. Default is ANY.
companyExcludearrayNoSkip jobs from specific companies. Add one company name per entry — any job whose company name exactly matches (case-insensitive) will not be collected. Works for both keyword-based and URL-based searches.
companyIncludearrayNoRestrict the search to specific companies. Add one company name per entry (e.g. Google, Shopify). Each name is resolved to a LinkedIn company ID and added to the search URL — LinkedIn will only return jobs from those companies. If a name cannot be matched, it is silently skipped.
companySizeMaxnumberNoOnly keep jobs from companies with at most this many employees. Jobs that do not match are still collected and counted toward your billing — use dynamicFilterMatch to filter them out.
companySizeMinnumberNoOnly keep jobs from companies with at least this many employees. Jobs that do not match are still collected and counted toward your billing — use dynamicFilterMatch to filter them out.
resumeKeywordsarrayNoEach entry has a required keyword and optional aliases for abbreviations (e.g. JavaScript → JS). Each job in the output will include matchedKeywords, unmatchedKeywords, and keywordMatchScorePercentage (0–100).
experienceLevelselectNoFilter by experience level. Multiple selections allowed. When LinkedIn serves its classic search engine this filter works normally. When LinkedIn serves its AI search engine the filter is ignored, so the scraper instead embeds it into the search query itself, which the AI search understands: the search is retried once with e.g. 'Entry level ' for a single selection or '(Entry level OR Associate) ' for multiple selections.
filterEasyApplybooleanNoWhen enabled, LinkedIn will only return jobs that support Easy Apply (apply directly on LinkedIn without leaving the site). Appends f_AL=true to the search URL. Keyword-based search only — does not affect URL-based search.
jobTitleExcludearrayNoSkip jobs whose title contains any of these keywords (whole-word, case-insensitive). For example, entering "senior" will exclude "Senior Software Engineer" but not "seniority". Works for both keyword-based and URL-based searches.
enrichCompanyDatabooleanNoWhen disabled, the scraper runs significantly faster by skipping additional company page requests. When enabled, the scraper fetches extra company details including: company description, full address (street, city, region, postal code, country), employee count, and company website. Default is disabled for optimal performance.
requireSalaryInfobooleanNoWhen enabled, only jobs that include salary information in the posting will have dynamicFilterMatch: true. Jobs without salary info are still collected and billed — use dynamicFilterMatch to filter them out.
jobFunctionExcludeselectNoExclude jobs whose job function matches any of the selected values. Only applies when "Include Job Functions" is not set. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results. Non-matching jobs are saved with dynamicFilterMatch: false. Find all LinkedIn job functions here: [LinkedIn Job Function Codes](https://learn.microsoft.com/en-us/linkedin/shared/references/reference-tables/job-function-codes)
jobFunctionIncludeselectNoOnly keep jobs where the job function matches one of the selected values. Note: This takes priority over Exclude Job Functions when both are set. Jobs are still collected and counted toward billing. Use dynamicFilterMatch to filter them in your results. Non-matching jobs are saved with dynamicFilterMatch: false. Applies to both URL-based and keyword-based searches. Find all LinkedIn job functions here: [LinkedIn Job Function Codes](https://learn.microsoft.com/en-us/linkedin/shared/references/reference-tables/job-function-codes)
jobIndustryExcludeselectNoExclude jobs whose industry matches any of the selected values. Only applies when "Include Industries" is not set. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results. You can find all the Linkedin industries at [LinkedIn Industry Codes](https://learn.microsoft.com/en-us/linkedin/shared/references/reference-tables/industry-codes-v2)
jobIndustryIncludeselectNoOnly keep jobs where the industry matches one of the selected values. Note: This takes priority over Exclude Industries when both are set. Jobs are still collected and counted toward billing. Use dynamicFilterMatch to filter them in your results. Non-matching jobs are saved with dynamicFilterMatch: false. Find all LinkedIn industries here: [LinkedIn Industry Codes](https://learn.microsoft.com/en-us/linkedin/shared/references/reference-tables/industry-codes-v2)
subLocationExcludearrayNoExclude jobs from specific cities or areas. Add each city name as a separate entry — any job whose location contains that name will be skipped (e.g. add "Laval" to exclude all jobs in Laval). Works independently of the Locations field. Also works with URL-based search.
saveOnlyUniqueItemsbooleanNoIf enabled, only unique items will be saved. Default is false.
companyFoundedDateMaxnumberNoOnly keep jobs from companies founded in or before this year. Jobs from companies whose founding year is not available always pass. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results.
companyFoundedDateMinnumberNoOnly keep jobs from companies founded in or after this year. Jobs from companies whose founding year is not available always pass. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results.
filterUnder10ApplicantsbooleanNoWhen enabled, LinkedIn will only return jobs with fewer than 10 applicants. Appends f_EA=true to the search URL. Keyword-based search only — does not affect URL-based search.
requireRecruiterProfilebooleanNoWhen enabled, only jobs that have a recruiter profile associated with the posting will have dynamicFilterMatch: true. Jobs without a recruiter profile are still collected and billed — use dynamicFilterMatch to filter them out.
companyFollowersCountMaxnumberNoOnly keep jobs from companies with at most this many LinkedIn followers. Jobs from companies whose follower count is not available always pass. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results.
companyFollowersCountMinnumberNoOnly keep jobs from companies with at least this many LinkedIn followers. Jobs from companies whose follower count is not available always pass. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results.
excludeRecruitingAgenciesbooleanNoWhen enabled, jobs posted by staffing and recruiting agencies will be flagged with dynamicFilterMatch: false. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results.`
companyOrganizationTypeExcludeselectNoFlag jobs from companies whose LinkedIn company page organization type matches any of the selected values as dynamicFilterMatch: false. Only applies when "Include Company Organization Types" is not set. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results. Full list of organization types at [LinkedIn Company Profile](https://learn.microsoft.com/en-us/linkedin/shared/references/fields/company-profile)
companyOrganizationTypeIncludeselectNoOnly keep jobs from companies whose LinkedIn company page organization type matches one of the selected values. Takes priority over "Exclude Company Organization Types" when both are set. Jobs are still collected and counted toward your billing — use dynamicFilterMatch to filter them out in your results. Non-matching jobs are saved with dynamicFilterMatch: false. Full list of organization types at [LinkedIn Company Profile](https://learn.microsoft.com/en-us/linkedin/shared/references/fields/company-profile)

Endpoints

GET/v1/agents/resources/inspect/apify.cheap_scraper.linkedin-job-scraperPublic
POST/v1/agents/resources/estimate/apify.cheap_scraper.linkedin-job-scraperPublic
POST/v1/agents/resources/run/apify.cheap_scraper.linkedin-job-scraperAgent key
GET/v1/agents/resources/runs/{run_id}Agent key

Quick start

Run it with one Agent One Key over the OpenAI-compatible resource rail.

curl -X POST https://api.deva.me/v1/agents/resources/run/apify.cheap_scraper.linkedin-job-scraper \
  -H "Authorization: Bearer deva_i1_your_key_here" \
  -H "Content-Type: application/json" \
  --data '{
    "params": {}
  }'

Related in Knowledge & Data