LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $0.50 / 1,000 job saveds

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrape LinkedIn job listings from search URLs or keyword-based searches with date, job-type, experience, and remote filters. Each result includes title, company, location, salary, full description, criteria, apply links, and optional company profiles. No login required.

Pricing

from $0.50 / 1,000 job saveds

Rating

0.0

(0)

Developer

Coder

Coder

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Share

Collect structured job listing data from public LinkedIn job searches — using search URLs or keyword-based queries. Add one or more searches, start a run, and receive clean JSON records in your Apify dataset. No LinkedIn login required.

Use it for recruiting pipelines, job board aggregation, market research, competitive hiring intelligence, lead generation, and talent analytics — without copying listings manually.


What you get

Each saved row is one job listing, organized into clear sections:

SectionWhat it contains
Job identityJob ID, title, job URL, and company logo
Company (listing)Company name, LinkedIn company ID, and company page URL
Location & workplaceLocation string and workplace type (on-site, remote, or hybrid) when shown
Posting detailsPosted date, relative posted text, salary when available, benefits, Easy Apply flag, and promoted flag
DescriptionFull job description as plain text and HTML
Employment criteriaSeniority, employment type, job function, industry, and related labels
Apply informationApply type, apply URL, and applicant count when shown
Search contextWhich search produced the job (searchId, keywords, location)
inputSnapshot of the search configuration that produced this job
company (optional)Enriched company profile when Fetch company details is enabled

Results are saved to the dataset as each job is processed, so you can preview progress before the run finishes.


Quick start on Apify

  1. Open the Actor in the Apify Console.
  2. Add at least one LinkedIn search URL or keyword search.
  3. Optionally enable Fetch company details for enriched company profiles.
  4. Click Start and open the Dataset tab as jobs are saved.

You can combine direct search URLs and keyword searches in a single run.

Example input:

{
"startUrls": [
{
"url": "https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400"
}
],
"keywordSearches": [
{
"keywords": "Python Developer",
"location": "United States"
}
],
"maxJobsPerSearch": 25,
"deduplicateJobs": true,
"fetchCompanyDetails": true
}

Input parameters

Provide at least one LinkedIn search URL or keyword search. You can use both in the same run.

Direct search URLs

FieldstartUrls
TypeList of URLs
DescriptionAdd one LinkedIn job search URL per row. Each URL is scraped exactly as provided, including filters already in the link.

Copy URLs from your browser after applying filters on LinkedIn (date posted, job type, remote, etc.).

Example:

{
"startUrls": [
{
"url": "https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400"
}
]
}

Keyword searches

FieldkeywordSearches
TypeList of objects
Required per rowkeywords
Optional per rowlocation (city, region, or country)

The filters in the next section apply to keyword searches only. Direct search URLs are not modified.

Example:

{
"keywordSearches": [
{
"keywords": "Python Developer",
"location": "United States"
}
]
}

Filters (keyword searches only)

These filters apply to keyword searches only. Direct search URLs are scraped as-is.

FieldDescription
datePostedTime range: any time, last hour, last 12/24 hours, last 3/7/14/30 days
jobTypesFull-time, part-time, contract, temporary, internship, volunteer, or other
experienceLevelsInternship, entry, associate, mid-senior, director, or executive
workplaceTypesOn-site, remote, or hybrid
companyIdsLimit results to specific LinkedIn company IDs (one numeric ID per row)
easyApplyOnlyInclude only jobs that support LinkedIn Easy Apply
excludePromotedRemove promoted listings from results

Output configuration

FieldDefaultDescription
maxJobsPerSearch25Maximum jobs to collect from each search URL or keyword search (1–10,000)
deduplicateJobstrueWhen enabled, the same job appearing in multiple searches is saved only once
fetchCompanyDetailsfalseWhen enabled, each job includes an enriched company object. Each unique company is fetched once per run and reused across jobs

What you will see during a run

The run log is written for end users — messages describe collection progress only.

Typical messages:

  • Starting job collection for N search(es).
  • Company profile enrichment is enabled. (when fetch company details is on)
  • Progress: 25 job(s) saved to the dataset.
  • No jobs were found for: … (when a search returns no results)
  • N job(s) from "…" could not be fully retrieved. (partial detail failures)
  • N job(s) from "…" could not be enriched with company details. (when company enrichment is enabled)
  • Run complete. Saved N job(s) to the dataset.

If one search fails or returns incomplete data, other searches in the same run can still succeed.

On the Apify free plan, you may also see a notice when free-tier limits apply (see Free plan limits).


Output overview

Dataset structure

  • Results are saved to a single Apify dataset
  • Each row is one job object with nested sections (criteria, input, and optionally company)
  • Jobs from multiple searches include searchId, searchKeywords, and searchLocation so you can trace which query produced each result
  • The nested input object records the exact search configuration for that job

Field presence varies by listing: not every job shows salary, benefits, workplace type, applicant count, or a job poster. Missing fields are omitted from the output — not necessarily a scraper error.

When Fetch company details is disabled, jobs do not include the company object. Basic company fields (companyName, companyId, companyUrl) are still included from the job listing.


Output fields

Job identity and listing

FieldDescription
jobIdLinkedIn job ID
titleJob title
jobUrlPublic LinkedIn job view URL
logoUrlCompany logo URL from the listing

Company (from listing)

FieldDescription
companyNameEmployer name
companyIdLinkedIn company slug
companyIdNumericNumeric LinkedIn company ID when available
companyUrlLinkedIn company page URL

Location, posting, and compensation

FieldDescription
locationJob location as shown on the listing
workplaceTypeOn-site, remote, or hybrid when shown
postedAtParsed posting date (YYYY-MM-DD) when available
postedTextRelative posting text (for example 5 days ago)
postedAgeDaysEstimated age in days when parseable
salarySalary or pay range when LinkedIn displays it
benefitsBenefits text when shown
easyApplyWhether LinkedIn Easy Apply is available
promotedWhether the listing is marked as promoted

Description and criteria

FieldDescription
descriptionFull job description as plain text
descriptionHtmlJob description with HTML formatting
criteriaArray of { label, value } pairs (seniority, employment type, job function, industries)
contractTypeEmployment type label when parsed
experienceLevelSeniority level when parsed
workTypeJob function when parsed
sectorIndustry when parsed
applicantTextApplicant count label when shown (for example Over 200 applicants)

Apply and poster

FieldDescription
applyTypeApply method (for example EXTERNAL or Easy Apply)
applyUrlURL to apply or view the application
posterProfileUrlLinkedIn profile URL of the job poster when shown
posterFullNameName of the job poster when shown

Search context

FieldDescription
searchIdInternal ID for the search that produced this job
searchKeywordsKeywords from a keyword search (null for direct URL searches)
searchLocationLocation from a keyword search (null for direct URL searches)
inputSnapshot of the search input — source, keywords, URL, filters, and limits

company (when Fetch company details is enabled)

FieldDescription
companyUrlCanonical LinkedIn company page URL
pageTypePage type (company or showcase)
companyIdLinkedIn company slug
companyIdNumericNumeric company ID
nameCompany name
taglineCompany tagline when shown
followerCountFollower count when available
logoUrlCompany logo URL
descriptionCompany about text
industryPrimary industry
companySizeEmployee count range
headquartersHeadquarters location
websiteCompany website URL
organizationTypeOrganization type (for example Privately Held)
foundedYear founded when shown
specialtiesList of company specialties
addressStructured address when available
affiliatedCompaniesRelated companies with name and url when shown

Example output

The excerpts below come from a real run combining a keyword search and a direct search URL. Full output is available in the run dataset.

Example input

{
"startUrls": [
{
"url": "https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400"
}
],
"keywordSearches": [
{
"keywords": "Python Developer",
"location": "United States"
}
],
"maxJobsPerSearch": 25,
"deduplicateJobs": true,
"fetchCompanyDetails": true
}

Excerpt — keyword search job with description and enriched company

{
"jobId": "3952273769",
"title": "Python Developer",
"companyName": "Open Systems Technologies",
"companyId": "open-systems-technologies",
"companyIdNumeric": "11655",
"companyUrl": "https://www.linkedin.com/company/open-systems-technologies?trk=public_jobs_topcard-org-name",
"location": "New York, NY",
"postedAt": "2026-06-22",
"postedText": "5 days ago",
"postedAgeDays": 5,
"salary": "$150",
"easyApply": false,
"promoted": false,
"jobUrl": "https://www.linkedin.com/jobs/view/python-developer-at-open-systems-technologies-3952273769",
"searchId": "keyword_2",
"searchKeywords": "Python Developer",
"searchLocation": "United States",
"input": {
"source": "keywordSearch",
"searchId": "keyword_2",
"keywords": "Python Developer",
"location": "United States",
"searchUrl": "https://www.linkedin.com/jobs/search?keywords=Python+Developer&location=United+States",
"maxJobsPerSearch": 25,
"filters": {
"easyApplyOnly": false,
"excludePromoted": false
}
},
"description": "A major financial firm is looking for a Python Developer to join their team in New York, NY. Compensation: $150-200k/year …",
"criteria": [
{ "label": "Seniority level", "value": "Not Applicable" },
{ "label": "Employment type", "value": "Full-time" },
{ "label": "Job function", "value": "Engineering and Information Technology" },
{ "label": "Industries", "value": "Staffing and Recruiting" }
],
"applicantText": "Over 200 applicants",
"contractType": "Full-time",
"experienceLevel": "Not Applicable",
"workType": "Engineering and Information Technology",
"sector": "Staffing and Recruiting",
"applyType": "EXTERNAL",
"applyUrl": "https://www.linkedin.com/jobs/view/3952273769",
"company": {
"companyUrl": "https://www.linkedin.com/company/open-systems-technologies/",
"pageType": "company",
"companyId": "open-systems-technologies",
"companyIdNumeric": "11655",
"name": "Open Systems Technologies",
"followerCount": 286921,
"description": "Open Systems Technologies is a tier-one vendor for the world's most competitive financial and technology companies…",
"industry": "Staffing and Recruiting",
"companySize": "201-500 employees",
"headquarters": "New York, NY",
"website": "http://www.opensystemstech.com",
"organizationType": "Privately Held",
"founded": "1990",
"specialties": [
"Staffing agency",
"Consulting services",
"Technology jobs"
]
}
}

Excerpt — direct search URL job

{
"jobId": "4434091820",
"title": "Front-End Engineer",
"companyName": "InAir",
"companyId": "inairstudio",
"location": "United States",
"postedAt": "2026-06-27",
"postedText": "1 day ago",
"postedAgeDays": 1,
"jobUrl": "https://www.linkedin.com/jobs/view/front-end-engineer-at-inair-4434091820",
"searchId": "url_1",
"searchKeywords": null,
"searchLocation": null,
"input": {
"source": "startUrl",
"searchId": "url_1",
"url": "https://www.linkedin.com/jobs/search?keywords=Full+Stack+Developer&location=United+States&f_TPR=r86400",
"maxJobsPerSearch": 25
},
"description": "We're looking for a full time Front-End Engineer (React) with strong hands-on coding experience…",
"criteria": [
{ "label": "Seniority level", "value": "Not Applicable" },
{ "label": "Employment type", "value": "Contract" },
{ "label": "Job function", "value": "Engineering and Information Technology" },
{ "label": "Industries", "value": "Software Development" }
],
"applicantText": "183 applicants",
"contractType": "Contract",
"applyType": "EXTERNAL"
}

Pricing

Job collection is included when you run the Actor. See the Pricing tab on the Apify Store listing for compute and platform costs.

When Fetch company details is enabled, a company_detail event is charged for each unique company profile successfully retrieved in the run. If the same company appears on multiple jobs, it is counted once. Failed company lookups are not charged. Cached companies within the same run are not charged again.

Disable Fetch company details if you only need listing-level company fields (companyName, companyId, companyUrl).


Free plan limits

On the Apify free plan, the Actor may automatically apply:

LimitValue
Direct search URLs per run2
Keyword searches per run2
Maximum jobs per search10

Additional searches or higher job limits are trimmed for free-plan runs. Paid Apify plans can use the full input without these caps. If limits apply, the run log will include a short notice.


Public listings and data coverage

No LinkedIn login required
The Actor reads publicly visible job search and listing pages. It does not sign in to LinkedIn and does not use your account or cookies.

Guest view vs signed-in view
Results reflect what LinkedIn shows to visitors who are not logged in. Compared with what you see when signed in, output may include:

  • Fewer applicant details or poster information
  • Missing or partial salary data
  • Shorter company descriptions
  • Limited workplace type labels

Coverage varies by listing, company, and region.

Search URL vs keyword search
Direct URLs preserve every filter in the link. Keyword searches use the Actor's filter fields. For precise control (for example a specific LinkedIn date filter), use a copied search URL.

Company enrichment
The optional company object comes from the public LinkedIn company page. Some companies expose more fields than others. Enrichment adds time to the run proportional to the number of unique companies.

Compliance
You are responsible for using collected data in line with applicable laws and LinkedIn's terms of service.


Tips for best results

  1. Copy search URLs from LinkedIn — When you need exact filters, paste the URL from your browser instead of rebuilding filters manually.
  2. Combine searches in one run — Use multiple keyword searches and URLs together; enable Remove duplicate jobs to avoid repeats.
  3. Start with a small maxJobsPerSearch — Test with 10–25 jobs per search before large exports.
  4. Enable company details when you need firmographics — Turn on Fetch company details for industry, size, headquarters, website, and specialties.
  5. Use jobId as a stable key — Deduplicate across runs on jobId when refreshing listings over time.
  6. Filter on input.searchId — Split results by search when running multiple queries in one job.
  7. Schedule recurring runs — Use Apify schedules to monitor new postings for your target roles and locations.
  8. Export flexibly — Download the dataset as JSON, CSV, Excel, or connect via API to your ATS, CRM, or data warehouse.

Frequently asked questions

Can I use both search URLs and keyword searches in one run?
Yes. Provide at least one of either type, or combine both. Enable Remove duplicate jobs to avoid saving the same listing twice.

Why is salary empty for some jobs?
LinkedIn only shows salary on some listings. When pay is not displayed publicly, the field is omitted or null.

Why is there no company object on my results?
The company object is only included when Fetch company details is enabled. Without it, you still receive companyName, companyId, and companyUrl from the job listing.

How is company enrichment billed?
Each unique company profile successfully retrieved counts as one company_detail event. Repeated jobs from the same employer in one run do not incur additional company charges. See the Pricing tab for rates.

Why did some jobs or company profiles fail?
Individual listings or company pages may be temporarily unavailable or restricted. The run continues for other searches and jobs; check the run log for counts of partial failures.

Do filters apply to my search URLs?
No. Filters in the input apply to keyword searches only. Direct URLs are scraped exactly as provided.

Can I scrape individual job URLs?
This Actor is built for job search results (search URLs or keyword queries). Paste a search URL or configure a keyword search rather than a single job view URL.

Why does the same job look different from my browser?
If you are signed in to LinkedIn, you may see more detail than a public guest visitor. This Actor matches the guest view.


Support

For Actor-specific issues, use the Issues tab on the Apify Store listing or contact the publisher through Apify.

For platform questions (runs, billing, API, schedules), see Apify documentation and Apify support.