LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrapes LinkedIn public jobs search results by query and location, enriches job detail pages, and stores structured job data in the dataset.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Alex Demeniuk

Alex Demeniuk

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

LinkedIn Jobs Guest Scraper

Scrape LinkedIn public jobs search results by keyword and location, open individual job detail pages, and save structured job data to the dataset.

This actor is designed for LinkedIn guest jobs pages and focuses on practical search-and-export workflows for market research, job tracking, and structured analysis.

What this actor does

  • Searches LinkedIn Jobs public guest results by keyword and location
  • Works without requiring LinkedIn login or user authorization
  • Supports optional geographic targeting via geoId
  • Supports search filters such as distance, posting age, Easy Apply, and under-10-applicants
  • Opens job detail pages and extracts structured metadata
  • Saves results to the default dataset as JSON
  • Imports job descriptions in Markdown-friendly form for downstream analysis
  • Returns run summary metrics including jobs found, processed, and saved

More relevant search results

LinkedIn Jobs search often returns many postings that are only loosely related to the search query. This happens because LinkedIn does not limit matching to the job title only — it can also match words found elsewhere in the posting, including the full vacancy text.

For example, a search for Product manager may return jobs whose actual title is not Product Manager at all, simply because the description mentions product management, product strategy, roadmaps, or related terms.

To improve result quality, the actor includes the titleMustContainSearchWords option.

When enabled, the actor saves only jobs whose title contains all meaningful words from the search query. This makes the results much more precise and is especially useful for broad searches like:

  • Product manager
  • Data engineer
  • Machine learning engineer
  • Growth manager

In practice, this is one of the most useful features of the actor because it dramatically reduces noisy results and makes the dataset far more useful for alerts, exports, trend tracking, and downstream analysis.

Markdown descriptions for AI analysis

The actor extracts the vacancy description in Markdown-friendly form (description_markdown), which is much easier to reuse than raw HTML.

This is especially useful if you want to:

  • analyze hiring trends with AI tools
  • send postings into NotebookLM or other LLM workflows
  • compare requirements, responsibilities, and skills across many roles
  • build recurring weekly or monthly market snapshots
  • prepare structured research inputs for downstream analysis

Markdown descriptions are cleaner, easier to read, and much better suited for AI-assisted analysis than scraped page HTML. If you still need the original raw markup, you can enable includeDescriptionHtml.

Search result limit

LinkedIn guest jobs search has a practical limit of 1000 job cards. Beyond that point, additional results are not exposed in the guest search flow used by this actor.

Because of this platform limitation:

  • maxJobs cannot be greater than 1000
  • even very broad searches may stop at the first 1000 available job cards
  • narrowing the query with better keywords, location filters, or the title filter often produces better data than simply trying to fetch more results

Input

Main fields

  • searchQuery — Job search phrase used on LinkedIn Jobs. The actor wraps the query in quotes to improve precision and reduce loosely related matches.
  • location — Human-readable location string used in LinkedIn search.
  • geoId — Optional LinkedIn region ID for more stable location targeting.
  • titleMustContainSearchWords — If enabled, only saves jobs whose title contains all meaningful search words.
  • radiusMiles — Optional search radius in miles.
  • postedWithinDays — Optional LinkedIn recency filter.
  • under10Applicants — If enabled, keeps only jobs marked as under 10 applicants.
  • easyApply — If enabled, keeps only Easy Apply jobs.
  • maxJobs — Maximum number of job cards to process, including skipped, filtered, and saved jobs.
  • includeDescriptionHtml — If enabled, includes raw job description HTML in the output.
  • proxyConfiguration — Optional proxy settings.

Example input

{
"proxyConfiguration": {
"useApifyProxy": false
},
"searchQuery": "Product manager",
"location": "San Francisco, Bay Area",
"titleMustContainSearchWords": true,
"radiusMiles": 0,
"postedWithinDays": 1,
"under10Applicants": false,
"easyApply": false,
"maxJobs": 1000,
"includeDescriptionHtml": false
}

Output

The actor stores one item per saved job posting in the dataset.

Typical dataset fields include:

  • job_id
  • title
  • company
  • location
  • job_url
  • listed_at
  • listed_at_iso
  • applicants_text
  • under_10_applicants
  • search_query
  • search_location
  • search_geo_id
  • search_radius_miles
  • offset
  • position
  • description_markdown
  • description_html (optional, if enabled)
  • seniority_level
  • employment_type
  • job_function
  • industries
  • job_criteria_text
  • company_url
  • salary_text
  • salary_min
  • salary_max
  • salary_currency
  • salary_period
  • recruiter_name
  • recruiter_title
  • recruiter_profile_url

Example output item

{
"job_id": "4262502911",
"title": "Senior Product Manager",
"company": "Example Company",
"location": "San Francisco Bay Area",
"job_url": "https://www.linkedin.com/jobs/view/4262502911/",
"listed_at": "3 days ago",
"listed_at_iso": "2026-07-20T00:00:00+00:00",
"applicants_text": "Over 100 applicants",
"under_10_applicants": false,
"search_query": "Product manager",
"search_location": "San Francisco, Bay Area",
"search_geo_id": "90000084",
"search_radius_miles": 0,
"offset": 0,
"position": 1,
"description_markdown": "## About the role\n\nThis is an example normalized job description.",
"description_html": null,
"seniority_level": "Mid-Senior level",
"employment_type": "Full-time",
"job_function": "Product Management",
"industries": "Software Development",
"job_criteria_text": "Mid-Senior level · Full-time · Product Management · Software Development",
"company_url": "https://www.linkedin.com/company/example-company/",
"salary_text": "$180,000 - $220,000 per year",
"salary_min": 180000,
"salary_max": 220000,
"salary_currency": "USD",
"salary_period": "year",
"recruiter_name": "Jane Recruiter",
"recruiter_title": "Senior Talent Partner",
"recruiter_profile_url": "https://www.linkedin.com/in/jane-recruiter/"
}

Run output

The actor also returns run-level summary fields:

  • results — API URL for the dataset items
  • jobsFound — Number of jobs found by the actor logic
  • jobsProcessed — Number of processed job cards
  • jobsSaved — Number of dataset items actually saved

Notes and limitations

  • This actor works with LinkedIn public jobs guest pages, not authenticated browsing.
  • No LinkedIn login or user authorization is required.
  • LinkedIn search results can shift between runs, so offsets and ordering are not guaranteed to be stable.
  • Some fields are only available on certain postings and may be missing.
  • Salary data is sparse and inconsistent across employers.
  • Recruiter and company metadata may vary by posting quality.
  • maxJobs limits processed job cards, not just saved dataset items.
  • The actor intentionally avoids relying on unstable fields unless they are present on the page.
  • Duplicate-looking postings can still appear across agencies, locations, or relisted jobs.
  • The guest jobs flow used here exposes at most 1000 job cards for a given search.

Use cases

  • Job search monitoring by keyword, location, and recency
  • Research workflows for studying vacancy requirements, responsibilities, and hiring patterns
  • Salary and skill analysis across roles and employers
  • Building datasets for downstream LLM summarization, reporting, and trend tracking