Registry / data / python-jobspy

python-jobspy

JSON →
library1.1.82pypypiunverified

JobSpy is a Python library designed for scraping job postings from major job boards including LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, and Naukri. It aggregates job data into a Pandas DataFrame, supports concurrent scraping, and includes features like proxy support to manage rate limiting. The library is actively maintained, with frequent updates adding new features and improving scraper reliability.

pip install -U python-jobspy
INSTALL
IMPORT
SIG · PYTHON-JOBSPY
P
python-jobspy
datapythonv1.1.82
Install
11.3s avg
Import
2324ms
Disk
280MB
Pass rate
6/ 10
Env Coverage6 / 10
glibc
3.93.13
musl
3.93.13
Install & Compatibility
Where this runs
tested against v1.1.82 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
glibc
py 3.10
✓ —
✓ 12.33s
py 3.11
✓ —
✓ 11.25s
py 3.12
✓ —
✓ 10.43s
py 3.13
✕ build_error
✕ build_error
py 3.9
✕ build_error
✕ build_error
280MB installed
● package 280MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

scrape_jobs
from jobspy import scrape_jobs

This quickstart example demonstrates how to scrape job postings for 'software engineer' in 'San Francisco, CA' from multiple job boards. It retrieves the latest 10 results posted within the last 72 hours, specifying 'USA' for Indeed/Glassdoor. The results are returned as a Pandas DataFrame.

import pandas as pd from jobspy import scrape_jobs jobs = scrape_jobs( site_name=["indeed", "linkedin", "zip_recruiter", "google", "glassdoor"], search_term="software engineer", location="San Francisco, CA", results_wanted=10, country_indeed="USA", # Required for Indeed/Glassdoor in many cases hours_old=72, # Jobs posted within the last 72 hours description_format="markdown", verbose=1 # Show warnings and errors ) if isinstance(jobs, pd.DataFrame): print(f"Found {len(jobs)} jobs") print(jobs.head()) # To save to CSV: # import csv # jobs.to_csv( # "jobs.csv", # quoting=csv.QUOTE_NONNUMERIC, # escapechar="\\", # index=False, # ) else: print("No jobs found or an error occurred.")
Debug
Known issues
gotchaDefault logging verbosity changed. Logs are now suppressed by default, showing only errors.
fix
Set `verbose=1` (for warnings+errors) or `verbose=2` (for all logs) in the `scrape_jobs` function call to re-enable detailed logging.
affects: v1.1.77 and later
gotchaIndeed job sorting changed from date to relevance by default, which may affect expected results.
fix
If exact date-based sorting is crucial, consider filtering results by `hours_old` or refining `search_term` for more precise matches.
affects: v1.1.66 and later
gotchaJob boards aggressively block IP addresses for too many requests, leading to `response code 429` (rate limiting).
fix
Implement delays between `scrape_jobs` calls, use proxies (via the `proxies` parameter), or enable authenticated scraping where available (e.g., `use_creds=True` for LinkedIn).
affects: All versions
gotchaWhen searching Indeed or Glassdoor, the `country_indeed` parameter is often required for specific countries to yield correct results.
fix
Always specify `country_indeed='USA'` or the appropriate country code when scraping Indeed or Glassdoor.
affects: All versions
gotchaCertain parameters like `hours_old` cannot be combined with other filtering parameters (e.g., `job_type` + `is_remote`) for specific sites like Indeed or LinkedIn.
fix
Consult the `scrape_jobs` documentation to understand parameter incompatibilities for each job board and choose only one of the conflicting filters.
affects: All versions
Upgrade
Version history
1.1.82latest on PyPI · released Jul 28, 2025
Audit
Dependencies
pythonrequiredRequires Python 3.10 or higher, but less than 4.0.
Agent activity
54 hits · last 30 days
node
42
Amazon
1
Resources
python-jobspy — pip install python-jobspy · libregistry