> ## 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

> Scrape job postings from LinkedIn globally using JobSpy.

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.

<Warning>
  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.
</Warning>

## Basic usage

Set `site_name` to `"linkedin"` to search LinkedIn:

```python theme={null}
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.

| Parameter                    | Type        | Description                                           |
| ---------------------------- | ----------- | ----------------------------------------------------- |
| `search_term`                | `str`       | Keywords to search for                                |
| `location`                   | `str`       | City, state, or region                                |
| `distance`                   | `int`       | Search radius in miles (default: 50)                  |
| `job_type`                   | `str`       | `fulltime`, `parttime`, `internship`, `contract`      |
| `is_remote`                  | `bool`      | Filter for remote jobs                                |
| `hours_old`                  | `int`       | Only jobs posted within this many hours               |
| `easy_apply`                 | `bool`      | Filter for LinkedIn Easy Apply jobs (see limitations) |
| `results_wanted`             | `int`       | Number of results to return                           |
| `offset`                     | `int`       | Start results from this position                      |
| `linkedin_fetch_description` | `bool`      | Fetch full description and direct URL (slower)        |
| `linkedin_company_ids`       | `list[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

```python theme={null}
jobs = scrape_jobs(
    site_name="linkedin",
    search_term="data scientist",
    location="New York, NY",
    results_wanted=20,
    linkedin_fetch_description=True,
)
```

<Warning>
  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.
</Warning>

### `linkedin_company_ids`

You can restrict the search to specific companies by passing a list of LinkedIn company IDs:

```python theme={null}
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`

<Note>
  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.
</Note>

## 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`:

| Field              | Type  | Description                                                   |
| ------------------ | ----- | ------------------------------------------------------------- |
| `job_level`        | `str` | Seniority level (e.g., `"entry level"`, `"mid-senior level"`) |
| `company_industry` | `str` | Industry of the hiring company                                |
| `job_function`     | `str` | Functional 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:

```python theme={null}
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.

<Tip>
  If you receive a `429` error, wait several minutes before retrying. Rotating proxies between scrapes reduces the chance of being blocked.
</Tip>
