Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/speedyapply/JobSpy/llms.txt

Use this file to discover all available pages before exploring further.

LinkedIn is the world’s largest professional network and one of the most widely used job boards. JobSpy’s LinkedIn scraper searches globally using the location parameter and supports filtering by company, job type, remote work, and recency.
LinkedIn is the most restrictive job board in JobSpy. It typically rate-limits after the 10th page per IP address. Using proxies is strongly recommended for any search requiring more than ~100 results.

Basic usage

Set site_name to "linkedin" to search LinkedIn:
from jobspy import scrape_jobs

jobs = scrape_jobs(
    site_name="linkedin",
    search_term="software engineer",
    location="San Francisco, CA",
    results_wanted=25,
    hours_old=72,
)
print(f"Found {len(jobs)} jobs")
print(jobs.head())

Supported parameters

LinkedIn uses the location parameter for geographic filtering. It searches globally and does not require a country_indeed value.
ParameterTypeDescription
search_termstrKeywords to search for
locationstrCity, state, or region
distanceintSearch radius in miles (default: 50)
job_typestrfulltime, parttime, internship, contract
is_remoteboolFilter for remote jobs
hours_oldintOnly jobs posted within this many hours
easy_applyboolFilter for LinkedIn Easy Apply jobs (see limitations)
results_wantedintNumber of results to return
offsetintStart results from this position
linkedin_fetch_descriptionboolFetch full description and direct URL (slower)
linkedin_company_idslist[int]Restrict search to specific company IDs

LinkedIn-specific parameters

linkedin_fetch_description

By default, LinkedIn search results do not include the full job description or a direct link to the employer’s application page. Setting linkedin_fetch_description=True makes an additional request per job to retrieve:
  • Full job description
  • Direct job URL (job_url_direct)
  • Job level (e.g., "entry level", "mid-senior level")
  • Company industry
  • Job function
jobs = scrape_jobs(
    site_name="linkedin",
    search_term="data scientist",
    location="New York, NY",
    results_wanted=20,
    linkedin_fetch_description=True,
)
Enabling linkedin_fetch_description increases the number of requests by O(n) — one additional request per job result. This significantly increases the risk of rate limiting. Use proxies when fetching descriptions for large result sets.

linkedin_company_ids

You can restrict the search to specific companies by passing a list of LinkedIn company IDs:
jobs = scrape_jobs(
    site_name="linkedin",
    search_term="engineer",
    linkedin_company_ids=[1441, 9367, 163253],  # Microsoft, Apple, Meta
    results_wanted=50,
)
To find a company’s LinkedIn ID, visit the company’s LinkedIn page. The numeric ID appears in the URL: https://www.linkedin.com/company/1441/.

Search filter limitations

LinkedIn only supports one of the following filters per search. Providing more than one has no effect:
  • hours_old
  • easy_apply
The LinkedIn Easy Apply filter (easy_apply=True) no longer works reliably due to changes in LinkedIn’s API. You may receive results that are not limited to Easy Apply listings.

Geographic coverage

LinkedIn searches globally. Pass any city, region, or country name in the location parameter. No additional country parameter is required.

Extra output fields

LinkedIn returns the following fields in addition to the standard JobPost schema. These are only populated when linkedin_fetch_description=True:
FieldTypeDescription
job_levelstrSeniority level (e.g., "entry level", "mid-senior level")
company_industrystrIndustry of the hiring company
job_functionstrFunctional area of the role

Rate limits and proxies

LinkedIn aggressively blocks scraping. You will typically see a 429 response after the 10th search page from a single IP address. To reliably retrieve large result sets, pass the proxies parameter:
jobs = scrape_jobs(
    site_name="linkedin",
    search_term="product manager",
    location="Austin, TX",
    results_wanted=200,
    linkedin_fetch_description=True,
    proxies=["user:pass@host1:port", "user:pass@host2:port"],
)
Each scraper instance round-robins through the provided proxies.
If you receive a 429 error, wait several minutes before retrying. Rotating proxies between scrapes reduces the chance of being blocked.

Build docs developers (and LLMs) love