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

# Troubleshooting

> Common issues and how to resolve them

## Installation issues

<AccordionGroup>
  <Accordion title="Import error after installing">
    If you see an `ImportError` when running `from jobspy import scrape_jobs`, check that you are using Python 3.10 or higher:

    ```bash theme={null}
    python --version
    ```

    If your version is below 3.10, upgrade Python before reinstalling JobSpy.
  </Accordion>

  <Accordion title="Module not found: jobspy">
    If Python cannot find the `jobspy` module, reinstall the package:

    ```bash theme={null}
    pip install -U python-jobspy
    ```

    Make sure you are installing into the same Python environment your script is using.
  </Accordion>
</AccordionGroup>

***

## No results returned

<AccordionGroup>
  <Accordion title="site_name is not recognized">
    Verify that each value in `site_name` matches one of the accepted strings exactly:

    | Site         | site\_name value |
    | ------------ | ---------------- |
    | LinkedIn     | `linkedin`       |
    | Indeed       | `indeed`         |
    | ZipRecruiter | `zip_recruiter`  |
    | Glassdoor    | `glassdoor`      |
    | Google Jobs  | `google`         |
    | Bayt         | `bayt`           |
    | Naukri       | `naukri`         |
    | BDJobs       | `bdjobs`         |

    Any typo or incorrect casing will cause that site to be skipped silently.
  </Accordion>

  <Accordion title="No results from Google Jobs">
    Google Jobs ignores `search_term`. You must use `google_search_term` instead:

    ```python theme={null}
    jobs = scrape_jobs(
        site_name="google",
        google_search_term="software engineer jobs near San Francisco, CA since yesterday",
    )
    ```

    See the [Google Jobs: no results](#google-jobs-no-results) section below for full details.
  </Accordion>

  <Accordion title="No results from Bayt">
    Bayt only supports `search_term`. Location filtering is not available for Bayt. If you are passing a `location` parameter, it will be ignored.
  </Accordion>

  <Accordion title="Network connectivity">
    Confirm your machine has internet access and that the job board's domain is reachable. If you are behind a firewall or corporate proxy, configure the `proxies` parameter accordingly.
  </Accordion>
</AccordionGroup>

***

## Rate limiting (429 errors)

<Warning>
  A `429` response means the job board has blocked your IP for sending too many requests. You need to slow down your requests or rotate your IP address using proxies.
</Warning>

<AccordionGroup>
  <Accordion title="LinkedIn rate limiting">
    LinkedIn is the most restrictive job board and typically rate limits around the 10th page of results with a single IP. For any scrape that goes beyond a small number of results, using proxies is strongly recommended.

    ```python theme={null}
    jobs = scrape_jobs(
        site_name="linkedin",
        search_term="data engineer",
        proxies=["user:pass@host:port"],
    )
    ```
  </Accordion>

  <Accordion title="Indeed rate limiting">
    Indeed currently has minimal rate limiting. For large scrapes, add a delay between subsequent calls to reduce the chance of being blocked.
  </Accordion>

  <Accordion title="ZipRecruiter and Glassdoor rate limiting">
    ZipRecruiter and Glassdoor have moderate rate limiting. Add delays between requests and consider using proxies for high-volume scraping.
  </Accordion>

  <Accordion title="How to configure proxies">
    Pass a list of proxy strings to the `proxies` parameter. Each scraper will round-robin through the list:

    ```python theme={null}
    jobs = scrape_jobs(
        site_name=["linkedin", "indeed"],
        search_term="software engineer",
        proxies=["user:pass@host:port", "localhost"],
    )
    ```

    If your proxies use a custom SSL certificate, provide the path with `ca_cert`:

    ```python theme={null}
    jobs = scrape_jobs(
        site_name="linkedin",
        search_term="software engineer",
        proxies=["user:pass@host:port"],
        ca_cert="/path/to/cert.pem",
    )
    ```
  </Accordion>
</AccordionGroup>

***

## Empty or missing fields

<AccordionGroup>
  <Accordion title="Some fields are always None">
    Several fields are only populated by specific job boards:

    * `job_level` — LinkedIn only
    * `company_industry` — LinkedIn and Indeed only
    * `company_addresses`, `company_num_employees`, `company_revenue`, `company_description`, `company_logo` — Indeed only
    * `skills`, `experience_range`, `company_rating`, `company_reviews_count`, `vacancy_count`, `work_from_home_type` — Naukri only

    If you are not scraping the relevant board, these columns will be `None`.
  </Accordion>

  <Accordion title="Salary/compensation is None">
    Compensation data is only populated when the job posting includes salary information. Many postings do not list a salary, so `min_amount`, `max_amount`, and `interval` may be `None`.

    For US-based results, JobSpy will attempt to parse salary figures from the description text when structured compensation data is unavailable.
  </Accordion>

  <Accordion title="Description is missing or truncated">
    Some job boards return truncated descriptions by default. For LinkedIn, you can fetch the full description by enabling `linkedin_fetch_description`:

    ```python theme={null}
    jobs = scrape_jobs(
        site_name="linkedin",
        search_term="software engineer",
        linkedin_fetch_description=True,
    )
    ```

    <Warning>
      `linkedin_fetch_description=True` makes an additional HTTP request for each job result, increasing total request count by O(n). Use it sparingly to avoid rate limiting.
    </Warning>
  </Accordion>
</AccordionGroup>

***

## Indeed search returning unrelated results

Indeed searches both the job title and the full description text. A broad `search_term` will match any posting that mentions your keywords anywhere in the listing.

<Tip>
  Use precise query syntax to narrow results:

  * `-word` excludes postings that mention that word
  * `"phrase"` requires an exact match
  * `(term1 OR term2)` matches either alternative

  ```python theme={null}
  search_term='"engineering intern" software summer (java OR python OR c++) 2025 -tax -marketing'
  ```
</Tip>

***

## LinkedIn limitations

<AccordionGroup>
  <Accordion title="Rate limited after a few pages">
    LinkedIn typically blocks requests around the 10th page of results when using a single IP. Use the `proxies` parameter to rotate IP addresses and extend how many results you can retrieve.
  </Accordion>

  <Accordion title="easy_apply filter is unreliable">
    The LinkedIn easy apply filter no longer works reliably. Passing `easy_apply=True` for LinkedIn will not consistently return only easy apply listings.
  </Accordion>

  <Accordion title="Cannot combine hours_old and easy_apply">
    On LinkedIn, you can only use one of the following per search:

    * `hours_old`
    * `easy_apply`

    Using both in the same call will not behave as expected.
  </Accordion>

  <Accordion title="linkedin_fetch_description slows down scraping">
    Setting `linkedin_fetch_description=True` fetches the full description and direct job URL for each result. This increases the total number of HTTP requests by O(n), where n is the number of jobs returned. Only enable this when you specifically need full descriptions or direct URLs.
  </Accordion>
</AccordionGroup>

***

## Google Jobs: no results

<Warning>
  Google Jobs does **not** use the `search_term` parameter. You must use `google_search_term` or you will get no results.
</Warning>

Google Jobs requires syntax that exactly matches what Google's own search interface produces. To get the right query:

1. Open Google Jobs in your browser.
2. Search for the role you want and apply any filters (location, date posted, etc.).
3. Copy the exact text shown in the Google Jobs search box.
4. Pass that string as `google_search_term`.

```python theme={null}
jobs = scrape_jobs(
    site_name="google",
    google_search_term="software engineer jobs near San Francisco, CA since yesterday",
)
```

<Note>
  `google_search_term` is the only parameter used for filtering Google Jobs results. Parameters like `location`, `hours_old`, and `job_type` are ignored for this site.
</Note>
